Created
May 18, 2014 14:48
-
-
Save andreasf/99fa28e3fd053f58e2e9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*************************************************************************** | |
| * copyright : (C) 2003-2013 by Pascal Brachet * | |
| * addons by Luis Silvestre ; S. Razi Alavizadeh * | |
| * http://www.xm1math.net/texmaker/ * | |
| * * | |
| * This program is free software; you can redistribute it and/or modify * | |
| * it under the terms of the GNU General Public License as published by * | |
| * the Free Software Foundation either version 2 of the License, or * | |
| * (at your option) any later version. * | |
| * * | |
| ***************************************************************************/ | |
| //#include <stdlib.h> | |
| #include <QMainWindow> | |
| #include <QMenuBar> | |
| #include <QToolBar> | |
| #include <QAction> | |
| #include <QStatusBar> | |
| #include <QSettings> | |
| #include <QApplication> | |
| #include <QDesktopWidget> | |
| #include <QTextCodec> | |
| #include <QFileInfo> | |
| #include <QLabel> | |
| #include <QTextStream> | |
| #include <QFile> | |
| #include <QDir> | |
| #include <QMessageBox> | |
| #include <QFileDialog> | |
| #include <QTreeWidgetItem> | |
| #include <QHeaderView> | |
| #include <QLineEdit> | |
| #include <QProcess> | |
| #include <QComboBox> | |
| #include <QSpinBox> | |
| #include <QTableWidget> | |
| #include <QTableWidgetItem> | |
| #include <QCheckBox> | |
| #include <QLocale> | |
| #include <QTabWidget> | |
| #include <QStyleFactory> | |
| #include <QStyle> | |
| #include <QFontDatabase> | |
| #include <QTextDocument> | |
| #include <QTextCursor> | |
| #include <QTextEdit> | |
| #include <QTextBlock> | |
| #include <QDebug> | |
| #include <QDesktopServices> | |
| #include <QAbstractItemModel> | |
| #include <QTextCharFormat> | |
| #include <QTextTableFormat> | |
| #include <QTextLength> | |
| #include <QFrame> | |
| #include <QFontMetrics> | |
| #include <QDateTime> | |
| #include <QTemporaryFile> | |
| #include <QPrintDialog> | |
| #include <QPrinter> | |
| #include <QProcessEnvironment> | |
| #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) | |
| #if defined(Q_OS_MAC) | |
| #include "macsupport.h" | |
| #endif | |
| #endif | |
| //#ifdef Q_WS_WIN | |
| //#include <windows.h> | |
| //#endif | |
| #include "geticon.h" | |
| #include "texmaker.h" | |
| #include "texmakerapp.h" | |
| #include "latexeditorview.h" | |
| #include "manhattanstyle.h" | |
| #include "structdialog.h" | |
| #include "filechooser.h" | |
| #include "graphicfilechooser.h" | |
| #include "tabdialog.h" | |
| #include "arraydialog.h" | |
| #include "tabbingdialog.h" | |
| #include "letterdialog.h" | |
| #include "quickdocumentdialog.h" | |
| #include "quickbeamerdialog.h" | |
| #include "usermenudialog.h" | |
| #include "usertooldialog.h" | |
| #include "refdialog.h" | |
| #include "configdialog.h" | |
| #include "aboutdialog.h" | |
| #include "spellerdialog.h" | |
| #include "encodingdialog.h" | |
| #include "usercompletiondialog.h" | |
| #include "texdocdialog.h" | |
| #include "addtagdialog.h" | |
| #include "exportdialog.h" | |
| #include "versiondialog.h" | |
| #include "unicodedialog.h" | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #include "x11fontdialog.h" | |
| #endif | |
| Texmaker::Texmaker(QWidget *parent) | |
| : QMainWindow(parent) | |
| { | |
| eraseSettings=false; | |
| replaceSettings=false; | |
| ReadSettings(); | |
| QString tempDir=QDir::tempPath(); | |
| #if defined(Q_OS_UNIX) || defined(Q_OS_MAC) | |
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |
| QString path=QStandardPaths::writableLocation(QStandardPaths::CacheLocation); | |
| if (QDir().mkpath(path)) tempDir=path; | |
| #else | |
| QString path=QDesktopServices::storageLocation(QDesktopServices::CacheLocation); | |
| if (QDir().mkpath(path)) tempDir=path; | |
| #endif | |
| #endif | |
| QString prefixFile=QDir::homePath(); | |
| prefixFile="tks_temp_"+prefixFile.section('/',-1); | |
| prefixFile=QString(QUrl::toPercentEncoding(prefixFile)); | |
| prefixFile.remove("%"); | |
| sessionTempFile=tempDir+"/"+prefixFile+".tks"; | |
| if (spelldicExist()) | |
| { | |
| QString dic=spell_dic.left(spell_dic.length()-4); | |
| spellChecker = new Hunspell(dic.toLatin1()+".aff",dic.toLatin1()+".dic"); | |
| } | |
| else spellChecker=0; | |
| //spellChecker=0; | |
| untitled_id=1; | |
| #if defined(Q_OS_MAC) | |
| setWindowIcon(QIcon(":/images/logo128.png")); | |
| //MacSupport::addFullscreen(this); | |
| #else | |
| setWindowIcon(getIcon(":/images/appicon.png")); | |
| #endif | |
| QApplication::setOrganizationName("Xm1"); | |
| QApplication::setApplicationName("Texmaker"); | |
| setIconSize(QSize(22,22 )); | |
| completer = new QCompleter(this); | |
| initCompleter(); | |
| QAction *Act; | |
| splitter1=new MiniSplitter(this); | |
| splitter1->setOrientation(Qt::Horizontal); | |
| splitter2=new MiniSplitter(splitter1); | |
| splitter2->setOrientation(Qt::Vertical); | |
| // PANNEAU STRUCTURE | |
| LeftPanelFrameBis=new QFrame(this); | |
| LeftPanelFrameBis->setLineWidth(0); | |
| LeftPanelFrameBis->setFrameShape(QFrame::NoFrame); | |
| LeftPanelFrameBis->setFrameShadow(QFrame::Plain); | |
| LeftPanelToolBarBis=new QToolBar("TitleBar",LeftPanelFrameBis); | |
| LeftPanelToolBarBis->setFloatable(false); | |
| LeftPanelToolBarBis->setOrientation(Qt::Horizontal); | |
| LeftPanelToolBarBis->setMovable(false); | |
| LeftPanelToolBarBis->setIconSize(QSize(16,16 )); | |
| LeftPanelToolBarBis->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); | |
| QFrame *LeftPanelFrame=new QFrame(this); | |
| LeftPanelFrame->setLineWidth(0); | |
| LeftPanelFrame->setFrameShape(QFrame::NoFrame); | |
| LeftPanelFrame->setFrameShadow(QFrame::Plain); | |
| splitter3=new MiniSplitter(splitter1); | |
| splitter3->setOrientation(Qt::Vertical); | |
| LeftPanelLayout= new QHBoxLayout(LeftPanelFrame); | |
| LeftPanelToolBar=new QToolBar("LogToolBar",LeftPanelFrame); | |
| LeftPanelToolBar->setFloatable(false); | |
| LeftPanelToolBar->setOrientation(Qt::Vertical); | |
| LeftPanelToolBar->setMovable(false); | |
| LeftPanelToolBar->setIconSize(QSize(16,16 )); | |
| LeftPanelStackedWidget=new QStackedWidget(LeftPanelFrame); | |
| StructureTreeWidget=new QTreeWidget(LeftPanelStackedWidget); | |
| StructureTreeWidget->setFrameStyle(QFrame::NoFrame); | |
| StructureTreeWidget->setColumnCount(1); | |
| StructureTreeWidget->header()->hide(); | |
| StructureTreeWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); | |
| StructureTreeWidget->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); | |
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |
| StructureTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); | |
| #else | |
| StructureTreeWidget->header()->setResizeMode(0, QHeaderView::ResizeToContents); | |
| #endif | |
| StructureTreeWidget->header()->setStretchLastSection(false); | |
| //StructureTreeWidget->setIndentation(10); | |
| connect( StructureTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem *,int )), SLOT(ClickedOnStructure(QTreeWidgetItem *,int))); | |
| connect(LeftPanelToolBar->addAction(getIcon(":/images/structure.png"),tr("Structure")), SIGNAL(triggered()), this, SLOT(ShowStructure())); | |
| LeftPanelStackedWidget->addWidget(StructureTreeWidget); | |
| OpenedFilesListWidget=new QListWidget(LeftPanelFrame); | |
| //OpenedFilesListWidget=new QListWidget(LeftPanelStackedWidget); | |
| OpenedFilesListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(OpenedFilesListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(OpenedFileActivated(QListWidgetItem*))); | |
| //connect(LeftPanelToolBar->addAction(QIcon(":/images/opened.png"),tr("Opened Files")), SIGNAL(triggered()), this, SLOT(ShowOpenedFiles())); | |
| //LeftPanelStackedWidget->addWidget(OpenedFilesListWidget); | |
| LeftPanelToolBar->addSeparator(); | |
| RelationListWidget=new SymbolListWidget(LeftPanelStackedWidget,0); | |
| RelationListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(RelationListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| relationAct = new QAction(getIcon(":/images/math1.png"),tr("Relation symbols"), this); | |
| connect(relationAct, SIGNAL(triggered()), this, SLOT(ShowRelation())); | |
| LeftPanelToolBar->addAction(relationAct); | |
| connect(RelationListWidget->addAct, SIGNAL(triggered()), this, SLOT(InsertFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(RelationListWidget); | |
| ArrowListWidget=new SymbolListWidget(LeftPanelStackedWidget,1); | |
| ArrowListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(ArrowListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| arrowAct = new QAction(getIcon(":/images/math2.png"),tr("Arrow symbols"), this); | |
| connect(arrowAct, SIGNAL(triggered()), this, SLOT(ShowArrow())); | |
| LeftPanelToolBar->addAction(arrowAct); | |
| connect(ArrowListWidget->addAct, SIGNAL(triggered()), this, SLOT(InsertFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(ArrowListWidget); | |
| MiscellaneousListWidget=new SymbolListWidget(LeftPanelStackedWidget,2); | |
| MiscellaneousListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(MiscellaneousListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| miscAct = new QAction(getIcon(":/images/math3.png"),tr("Miscellaneous symbols"), this); | |
| connect(miscAct, SIGNAL(triggered()), this, SLOT(ShowMisc())); | |
| LeftPanelToolBar->addAction(miscAct); | |
| connect(MiscellaneousListWidget->addAct, SIGNAL(triggered()), this, SLOT(InsertFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(MiscellaneousListWidget); | |
| DelimitersListWidget=new SymbolListWidget(LeftPanelStackedWidget,3); | |
| DelimitersListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(DelimitersListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| delimAct = new QAction(getIcon(":/images/math4.png"),tr("Delimiters"), this); | |
| connect(delimAct, SIGNAL(triggered()), this, SLOT(ShowDelim())); | |
| LeftPanelToolBar->addAction(delimAct); | |
| connect(DelimitersListWidget->addAct, SIGNAL(triggered()), this, SLOT(InsertFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(DelimitersListWidget); | |
| GreekListWidget=new SymbolListWidget(LeftPanelStackedWidget,4); | |
| GreekListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(GreekListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| greekAct = new QAction(getIcon(":/images/math5.png"),tr("Greek letters"), this); | |
| connect(greekAct, SIGNAL(triggered()), this, SLOT(ShowGreek())); | |
| LeftPanelToolBar->addAction(greekAct); | |
| connect(GreekListWidget->addAct, SIGNAL(triggered()), this, SLOT(InsertFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(GreekListWidget); | |
| MostUsedListWidget=new SymbolListWidget(LeftPanelStackedWidget,5); | |
| MostUsedListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(MostUsedListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| usedAct = new QAction(getIcon(":/images/math6.png"),tr("Most used symbols"), this); | |
| connect(usedAct, SIGNAL(triggered()), this, SLOT(ShowMostUsed())); | |
| LeftPanelToolBar->addAction(usedAct); | |
| SetMostUsedSymbols(); | |
| LeftPanelStackedWidget->addWidget(MostUsedListWidget); | |
| FavoriteListWidget=new SymbolListWidget(LeftPanelStackedWidget,6); | |
| FavoriteListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(FavoriteListWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(InsertSymbol(QTableWidgetItem*))); | |
| favAct = new QAction(getIcon(":/images/math7.png"),tr("Favorites symbols"), this); | |
| connect(favAct, SIGNAL(triggered()), this, SLOT(ShowFavorite())); | |
| LeftPanelToolBar->addAction(favAct); | |
| FavoriteListWidget->SetFavoritePage(favoriteSymbolList); | |
| connect(FavoriteListWidget->remAct, SIGNAL(triggered()), this, SLOT(RemoveFavoriteSymbols())); | |
| LeftPanelStackedWidget->addWidget(FavoriteListWidget); | |
| LeftPanelToolBar->addSeparator(); | |
| leftrightWidget=new XmlTagsListWidget(LeftPanelStackedWidget,":/tags/leftright_tags.xml"); | |
| leftrightWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(leftrightWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertXmlTag(QListWidgetItem*))); | |
| leftrightAct = new QAction(getIcon(":/images/leftright.png"),"left/right", this); | |
| connect(leftrightAct, SIGNAL(triggered()), this, SLOT(ShowLeftRight())); | |
| LeftPanelToolBar->addAction(leftrightAct); | |
| LeftPanelStackedWidget->addWidget(leftrightWidget); | |
| LeftPanelToolBar->addSeparator(); | |
| usertagsListWidget=new UserTagsListWidget(LeftPanelStackedWidget); | |
| usertagsListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(usertagsListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertUserElement(QListWidgetItem*))); | |
| userpanelAct = new QAction(getIcon(":/images/user.png"),tr("User"), this); | |
| connect(userpanelAct, SIGNAL(triggered()), this, SLOT(ShowUserPanel())); | |
| LeftPanelToolBar->addAction(userpanelAct); | |
| usertagsListWidget->updateList(userTagsList); | |
| connect(usertagsListWidget->remAct, SIGNAL(triggered()), this, SLOT(RemoveUserTag())); | |
| connect(usertagsListWidget->addAct, SIGNAL(triggered()), this, SLOT(AddUserTag())); | |
| connect(usertagsListWidget->changeAct, SIGNAL(triggered()), this, SLOT(ChangeUserTag())); | |
| connect(usertagsListWidget, SIGNAL(posChanged()), this, SLOT(UpdateUserTag())); | |
| LeftPanelStackedWidget->addWidget(usertagsListWidget); | |
| LeftPanelToolBar->addSeparator(); | |
| PsListWidget=new XmlTagsListWidget(LeftPanelStackedWidget,":/tags/pstricks_tags.xml"); | |
| PsListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(PsListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertXmlTag(QListWidgetItem*))); | |
| pstricksAct = new QAction(getIcon(":/images/pstricks.png"),tr("Pstricks Commands"), this); | |
| connect(pstricksAct, SIGNAL(triggered()), this, SLOT(ShowPstricks())); | |
| if (showPstricks) LeftPanelToolBar->addAction(pstricksAct); | |
| LeftPanelStackedWidget->addWidget(PsListWidget); | |
| MpListWidget=new XmlTagsListWidget(LeftPanelStackedWidget,":/tags/metapost_tags.xml"); | |
| MpListWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(MpListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertXmlTag(QListWidgetItem*))); | |
| mpAct = new QAction(getIcon(":/images/metapost.png"),tr("MetaPost Commands"), this); | |
| connect(mpAct, SIGNAL(triggered()), this, SLOT(ShowMplist())); | |
| if (showMp) LeftPanelToolBar->addAction(mpAct); | |
| LeftPanelStackedWidget->addWidget(MpListWidget); | |
| tikzWidget=new XmlTagsListWidget(LeftPanelStackedWidget,":/tags/tikz_tags.xml"); | |
| tikzWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(tikzWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertXmlTag(QListWidgetItem*))); | |
| tikzAct = new QAction(getIcon(":/images/tikz.png"),tr("Tikz Commands"), this); | |
| connect(tikzAct, SIGNAL(triggered()), this, SLOT(ShowTikz())); | |
| if (showTikz) LeftPanelToolBar->addAction(tikzAct); | |
| LeftPanelStackedWidget->addWidget(tikzWidget); | |
| asyWidget=new XmlTagsListWidget(LeftPanelStackedWidget,":/tags/asymptote_tags.xml"); | |
| asyWidget->setFrameStyle(QFrame::NoFrame); | |
| connect(asyWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(InsertXmlTag(QListWidgetItem*))); | |
| asyAct = new QAction(getIcon(":/images/asymptote.png"),tr("Asymptote Commands"), this); | |
| connect(asyAct, SIGNAL(triggered()), this, SLOT(ShowAsy())); | |
| if (showAsy) LeftPanelToolBar->addAction(asyAct); | |
| LeftPanelStackedWidget->addWidget(asyWidget); | |
| viewPstricksAct = new QAction(tr("Pstricks Commands"), this); | |
| viewPstricksAct->setCheckable(true); | |
| connect(viewPstricksAct, SIGNAL(triggered()), this, SLOT(TogglePstricks())); | |
| viewMpAct = new QAction(tr("MetaPost Commands"), this); | |
| viewMpAct->setCheckable(true); | |
| connect(viewMpAct, SIGNAL(triggered()), this, SLOT(ToggleMetapost())); | |
| viewTikzAct = new QAction(tr("Tikz Commands"), this); | |
| viewTikzAct->setCheckable(true); | |
| connect(viewTikzAct, SIGNAL(triggered()), this, SLOT(ToggleTikz())); | |
| viewAsyAct = new QAction(tr("Asymptote Commands"), this); | |
| viewAsyAct->setCheckable(true); | |
| connect(viewAsyAct, SIGNAL(triggered()), this, SLOT(ToggleAsymptote())); | |
| LeftPanelToolBar->setContextMenuPolicy(Qt::CustomContextMenu); | |
| connect(LeftPanelToolBar, SIGNAL( customContextMenuRequested( const QPoint & )), this, SLOT( customContentsMenuStructure( const QPoint & ))); | |
| LeftPanelLayout->setSpacing(0); | |
| LeftPanelLayout->setMargin(0); | |
| LeftPanelLayout->addWidget(LeftPanelToolBar); | |
| LeftPanelLayout->addWidget(LeftPanelStackedWidget); | |
| LeftPanelStackedWidget->setCurrentWidget(StructureTreeWidget); | |
| Act = new QAction(QIcon(":/images/empty.png"),"", this); | |
| LeftPanelToolBarBis->addAction(Act); | |
| Act->setEnabled(false); | |
| titleLeftPanel=new QLabel(tr("Structure"),LeftPanelToolBarBis); | |
| LeftPanelToolBarBis->addWidget(titleLeftPanel); | |
| LeftPanelLayoutBis= new QVBoxLayout(LeftPanelFrameBis); | |
| LeftPanelLayoutBis->setSpacing(0); | |
| LeftPanelLayoutBis->setMargin(0); | |
| LeftPanelLayoutBis->addWidget(LeftPanelToolBarBis); | |
| LeftPanelLayoutBis->addWidget(LeftPanelFrame); | |
| splitter3->addWidget(LeftPanelFrameBis); | |
| splitter3->addWidget(OpenedFilesListWidget); | |
| splitter1->addWidget(splitter3); | |
| splitter3->setMinimumWidth(210); | |
| Outputframe=new QFrame(this); | |
| Outputframe->setLineWidth(0); | |
| Outputframe->setFrameShape(QFrame::NoFrame); | |
| Outputframe->setFrameShadow(QFrame::Plain); | |
| OutputLayoutH= new QHBoxLayout(Outputframe); | |
| OutputLayoutH->setSpacing(0); | |
| OutputLayoutH->setMargin(0); | |
| logToolBar=new QToolBar("LogToolBar",Outputframe); | |
| logToolBar->setFloatable(false); | |
| logToolBar->setOrientation(Qt::Vertical); | |
| logToolBar->setMovable(false); | |
| logToolBar->setIconSize(QSize(16,16 )); | |
| QFrame *Outputframebis=new QFrame(this); | |
| Outputframebis->setLineWidth(0); | |
| Outputframebis->setFrameShape(QFrame::NoFrame); | |
| Outputframebis->setFrameShadow(QFrame::Plain); | |
| OutputLayoutV= new QVBoxLayout(Outputframebis); | |
| OutputLayoutV->setSpacing(0); | |
| OutputLayoutV->setMargin(0); | |
| OutputTableWidget= new QTableWidget (1,5,Outputframebis); | |
| //OutputTableWidget->setFrameShape(QFrame::Box); | |
| OutputTableWidget->setFrameShadow(QFrame::Plain); | |
| OutputTableWidget->setFrameStyle(QFrame::NoFrame); | |
| QTableWidgetItem *HeaderItem = new QTableWidgetItem(" "); | |
| HeaderItem->setTextAlignment(Qt::AlignLeft); | |
| OutputTableWidget->setHorizontalHeaderItem(0,HeaderItem); | |
| HeaderItem = new QTableWidgetItem("File"); | |
| HeaderItem->setTextAlignment(Qt::AlignLeft); | |
| OutputTableWidget->setHorizontalHeaderItem(1,HeaderItem); | |
| HeaderItem = new QTableWidgetItem("Type"); | |
| HeaderItem->setTextAlignment(Qt::AlignLeft); | |
| OutputTableWidget->setHorizontalHeaderItem(2,HeaderItem); | |
| HeaderItem = new QTableWidgetItem("Line"); | |
| HeaderItem->setTextAlignment(Qt::AlignLeft); | |
| OutputTableWidget->setHorizontalHeaderItem(3,HeaderItem); | |
| HeaderItem = new QTableWidgetItem("Message"); | |
| HeaderItem->setTextAlignment(Qt::AlignLeft); | |
| OutputTableWidget->setHorizontalHeaderItem(4,HeaderItem); | |
| //OutputTableWidget->setWordWrap(true); | |
| OutputTableWidget->setSelectionMode (QAbstractItemView::SingleSelection); | |
| QFontMetrics fm(qApp->font()); | |
| OutputTableWidget->setColumnWidth(0,fm.width("> ")); | |
| OutputTableWidget->setColumnWidth(1,10*fm.width("w")); | |
| OutputTableWidget->setColumnWidth(2,fm.width("WarningWW")); | |
| OutputTableWidget->setColumnWidth(3,fm.width("Line WWWWWWWW")); | |
| OutputTableWidget->setColumnWidth(4,20*fm.width("w")); | |
| connect(OutputTableWidget, SIGNAL(itemClicked ( QTableWidgetItem*)), this, SLOT(ClickedOnLogLine(QTableWidgetItem*))); | |
| OutputTableWidget->horizontalHeader()->setStretchLastSection(true); | |
| OutputTableWidget->setMinimumHeight(4*(fm.lineSpacing()+4)); | |
| //OutputTableWidget->setMaximumHeight(8*(fm.lineSpacing()+4)); | |
| OutputTableWidget->verticalHeader()->hide(); | |
| //OutputTableWidget->horizontalHeader()->hide(); | |
| OutputTextEdit = new LogEditor(Outputframebis); | |
| OutputTextEdit->setFrameStyle(QFrame::NoFrame); | |
| OutputTextEdit->setMinimumHeight(4*(fm.lineSpacing()+4)); | |
| connect(OutputTextEdit, SIGNAL(clickonline(int )),this,SLOT(ClickedOnOutput(int ))); | |
| separatorline = new QFrame(Outputframebis); | |
| separatorline->setMinimumHeight(1); | |
| separatorline->setMaximumHeight(1); | |
| separatorline->setFrameShape(QFrame::Box); | |
| separatorline->setFrameShadow(QFrame::Plain); | |
| separatorline->setStyleSheet("color:black"); | |
| OutputLayoutV->addWidget(OutputTableWidget); | |
| OutputLayoutV->addWidget(separatorline); | |
| OutputLayoutV->addWidget(OutputTextEdit); | |
| OutputLayoutH->addWidget(logToolBar); | |
| OutputLayoutH->addWidget(Outputframebis); | |
| OutputLayoutH->setSpacing(0); | |
| OutputTableWidget->hide(); | |
| separatorline->hide(); | |
| logpresent=false; | |
| listViewerCommands.clear(); | |
| checkViewerInstance=false; | |
| errorFileList.clear(); | |
| errorTypeList.clear(); | |
| errorLineList.clear(); | |
| errorMessageList.clear(); | |
| errorLogList.clear(); | |
| onlyErrorList.clear(); | |
| errorIndex=-1; | |
| translationList.clear(); | |
| translationList.append(QString("en")); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QDir transdir(QCoreApplication::applicationDirPath()); | |
| #else | |
| QDir transdir(PREFIX"/share/texmaker"); | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QDir transdir(QCoreApplication::applicationDirPath() + "/../Resources"); | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QDir transdir(QCoreApplication::applicationDirPath()); | |
| #endif | |
| foreach (QFileInfo qmFileInfo, transdir.entryInfoList(QStringList("texmaker_*.qm"),QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) | |
| { | |
| QString transName = qmFileInfo.completeBaseName(); | |
| transName.remove("texmaker_"); | |
| translationList.append(transName); | |
| } | |
| StackedViewers=new QStackedWidget(this); | |
| StackedViewers->setLineWidth(0); | |
| StackedViewers->setFrameShape(QFrame::NoFrame); | |
| StackedViewers->setFrameShadow(QFrame::Plain); | |
| StackedViewers->setMinimumWidth(200); | |
| // EDITEUR | |
| QFrame *centralFrame=new QFrame(this); | |
| centralFrame->setLineWidth(0); | |
| centralFrame->setFrameShape(QFrame::NoFrame); | |
| centralFrame->setFrameShadow(QFrame::Plain); | |
| centralToolBar=new QToolBar("LogToolBar",centralFrame); | |
| centralToolBar->setFloatable(false); | |
| centralToolBar->setOrientation(Qt::Vertical); | |
| centralToolBar->setMovable(false); | |
| centralToolBar->setIconSize(QSize(16,16 )); | |
| sectionMenu=new QMenu(this); | |
| Act = new QAction("part", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("chapter", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("section", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("subsection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("subsubsection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("paragraph", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| Act = new QAction("subparagraph", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SectionCommand())); | |
| sectionMenu->addAction(Act); | |
| refMenu=new QMenu(this); | |
| Act = new QAction("label", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| Act = new QAction("ref", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| Act = new QAction("pageref", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| Act = new QAction("index", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| Act = new QAction("cite", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| Act = new QAction("footnote", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OtherCommand())); | |
| refMenu->addAction(Act); | |
| sizeMenu=new QMenu(this); | |
| Act = new QAction("tiny", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("scriptsize", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("footnotesize", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("small", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("normalsize", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("large", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("Large", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("LARGE", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("huge", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction("Huge", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SizeCommand())); | |
| sizeMenu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/sectioning.png"),"part/chapter/section...", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ShowSectionMenu())); | |
| centralToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/ref.png"),"Label/ref/cite...", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ShowRefMenu())); | |
| centralToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/size.png"),"tiny/small/large...", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ShowSizeMenu())); | |
| centralToolBar->addAction(Act); | |
| centralToolBar->addSeparator(); | |
| Act = new QAction(getIcon(":/images/text_bold.png"),tr("Bold"), this); | |
| Act->setData("\\textbf{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| centralToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_italic.png"),tr("Italic"), this); | |
| Act->setData("\\textit{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| centralToolBar->addAction(Act); | |
| emphasisAct = new QAction(getIcon(":/images/text_emphasis.png"),"Emphasis", this); | |
| emphasisAct->setData("\\emph{/}/6/0"); | |
| connect(emphasisAct, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| if (showEmphasis) centralToolBar->addAction(emphasisAct); | |
| Act = new QAction(getIcon(":/images/text_left.png"),tr("Left"), this); | |
| Act->setData("\\begin{flushleft}\n/\n\\end{flushleft}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| centralToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_center.png"),tr("Center"), this); | |
| Act->setData("\\begin{center}\n/\n\\end{center}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| centralToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_right.png"),tr("Right"), this); | |
| Act->setData("\\begin{flushright}\n/\n\\end{flushright}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| centralToolBar->addAction(Act); | |
| centralToolBar->addSeparator(); | |
| newlineAct = new QAction(getIcon(":/images/newline.png"),tr("New line"), this); | |
| newlineAct->setData("\\\\\n/0/1/The \\newline command breaks the line right where it is. It can only be used in paragraph mode."); | |
| connect(newlineAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showNewline) centralToolBar->addAction(newlineAct); | |
| centralToolBar->addSeparator(); | |
| mathmodeAct = new QAction(getIcon(":/images/mathmode.png"),"$...$", this); | |
| mathmodeAct->setData("$ $/2/0/The math environment can be used in both paragraph and LR mode"); | |
| connect(mathmodeAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showMathmode) centralToolBar->addAction(mathmodeAct); | |
| indiceAct = new QAction(getIcon(":/images/indice.png"),"_{} - subscript", this); | |
| indiceAct->setData("_{}/2/0/ "); | |
| connect(indiceAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showIndice) centralToolBar->addAction(indiceAct); | |
| puissanceAct = new QAction(getIcon(":/images/puissance.png"),"^{} - superscript", this); | |
| puissanceAct->setData("^{}/2/0/ "); | |
| connect(puissanceAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showPuissance) centralToolBar->addAction(puissanceAct); | |
| smallfracAct = new QAction(getIcon(":/images/smallfrac.png"),"\\frac{}{}", this); | |
| smallfracAct->setData("\\frac{}{}/6/0/ "); | |
| connect(smallfracAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showSmallfrac) centralToolBar->addAction(smallfracAct); | |
| dfracAct = new QAction(getIcon(":/images/dfrac.png"),"\\dfrac{}{}", this); | |
| dfracAct->setData("\\dfrac{}{}/7/0/ "); | |
| connect(dfracAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showDfrac) centralToolBar->addAction(dfracAct); | |
| racineAct = new QAction(getIcon(":/images/racine.png"),"\\sqrt{}", this); | |
| racineAct->setData("\\sqrt{}/6/0/ "); | |
| connect(racineAct, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| if (showRacine) centralToolBar->addAction(racineAct); | |
| showemphasisAct = new QAction("Emphasis", this); | |
| showemphasisAct->setCheckable(true); | |
| connect(showemphasisAct, SIGNAL(triggered()), this, SLOT(ToggleEmphasis())); | |
| shownewlineAct = new QAction(tr("New line"), this); | |
| shownewlineAct->setCheckable(true); | |
| connect(shownewlineAct, SIGNAL(triggered()), this, SLOT(ToggleNewline())); | |
| showmathmodeAct = new QAction("$...$", this); | |
| showmathmodeAct->setCheckable(true); | |
| connect(showmathmodeAct, SIGNAL(triggered()), this, SLOT(ToggleMathmode())); | |
| showindiceAct = new QAction("_{} - subscript", this); | |
| showindiceAct->setCheckable(true); | |
| connect(showindiceAct, SIGNAL(triggered()), this, SLOT(ToggleIndice())); | |
| showpuissanceAct = new QAction("^{} - superscript", this); | |
| showpuissanceAct->setCheckable(true); | |
| connect(showpuissanceAct, SIGNAL(triggered()), this, SLOT(TogglePuissance())); | |
| showsmallfracAct = new QAction("\\frac{}{}", this); | |
| showsmallfracAct->setCheckable(true); | |
| connect(showsmallfracAct, SIGNAL(triggered()), this, SLOT(ToggleSmallfrac())); | |
| showdfracAct = new QAction("\\dfrac{}{}", this); | |
| showdfracAct->setCheckable(true); | |
| connect(showdfracAct, SIGNAL(triggered()), this, SLOT(ToggleDfrac())); | |
| showracineAct = new QAction("\\sqrt{}", this); | |
| showracineAct->setCheckable(true); | |
| connect(showracineAct, SIGNAL(triggered()), this, SLOT(ToggleRacine())); | |
| centralToolBar->setContextMenuPolicy(Qt::CustomContextMenu); | |
| connect(centralToolBar, SIGNAL( customContextMenuRequested( const QPoint & )), this, SLOT( customContentsMenuMain( const QPoint & ))); | |
| QFrame *centralFrameBis=new QFrame(this); | |
| centralFrameBis->setLineWidth(0); | |
| centralFrameBis->setFrameShape(QFrame::NoFrame); | |
| centralFrameBis->setFrameShadow(QFrame::Plain); | |
| centralToolBarBis=new QToolBar("FileBar",centralFrameBis); | |
| centralToolBarBis->setFloatable(false); | |
| centralToolBarBis->setOrientation(Qt::Horizontal); | |
| centralToolBarBis->setMovable(false); | |
| centralToolBarBis->setIconSize(QSize(16,16 )); | |
| centralToolBarBis->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); | |
| LeftPanelToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| LeftPanelToolBarBis->setMaximumHeight(centralToolBarBis->height()); | |
| //centralToolBarBis->setStyle(QStyleFactory::create("Plastique")); | |
| ToggleDocAct=new QAction(getIcon(":/images/toggle.png"),tr("Toggle between the master document and the current document")+" (CTRL+SHIFT+F2)", this); | |
| ToggleDocAct->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F2); | |
| connect(ToggleDocAct, SIGNAL(triggered()), this, SLOT(ToggleMasterCurrent())); | |
| centralToolBarBis->addAction(ToggleDocAct); | |
| Act = new QAction(getIcon(":/images/errorprev.png"),tr("Previous Document"), this); | |
| //Act->setShortcut(Qt::ALT+Qt::Key_PageUp); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(gotoPrevDocument())); | |
| centralToolBarBis->addAction(Act); | |
| Act = new QAction(getIcon(":/images/errornext.png"),tr("Next Document"), this); | |
| //Act->setShortcut(Qt::ALT+Qt::Key_PageDown); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(gotoNextDocument())); | |
| centralToolBarBis->addAction(Act); | |
| comboFiles=new QComboBox(centralToolBarBis); | |
| comboFiles->setMaximumWidth(300); | |
| comboFiles->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); | |
| comboFiles->setMinimumContentsLength(20); | |
| comboFiles->setMaxVisibleItems(40); | |
| comboFiles->setContextMenuPolicy(Qt::CustomContextMenu); | |
| connect(comboFiles, SIGNAL(activated(int)), this, SLOT(listSelectionActivated(int))); | |
| centralToolBarBis->addWidget(comboFiles); | |
| QWidget* spacer = new QWidget(); | |
| spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | |
| centralToolBarBis->addWidget(spacer); | |
| Act = new QAction(getIcon(":/images/fileclose.png"), tr("Close"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileClose())); | |
| centralToolBarBis->addAction(Act); | |
| centralToolBarBis->addSeparator(); | |
| posLabel=new QLabel("L: C: ",centralToolBarBis); | |
| posLabel->setFixedWidth(fm.width("L:99999 C:99999")); | |
| centralToolBarBis->addWidget(posLabel); | |
| centralToolBarBis->addSeparator(); | |
| Act = new QAction(getIcon(":/images/bookmark1.png"),tr("Click to jump to the bookmark"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(gotoBookmark1())); | |
| centralToolBarBis->addAction(Act); | |
| Act = new QAction(getIcon(":/images/bookmark2.png"),tr("Click to jump to the bookmark"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(gotoBookmark2())); | |
| centralToolBarBis->addAction(Act); | |
| Act = new QAction(getIcon(":/images/bookmark3.png"),tr("Click to jump to the bookmark"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(gotoBookmark3())); | |
| centralToolBarBis->addAction(Act); | |
| EditorView=new QStackedWidget(centralFrame); | |
| connect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateCaption()) ); | |
| connect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateStructure()) ); | |
| CentralLayout= new QHBoxLayout(centralFrame); | |
| CentralLayout->setSpacing(0); | |
| CentralLayout->setMargin(0); | |
| CentralLayout->addWidget(centralToolBar); | |
| CentralLayout->addWidget(EditorView); | |
| CentralLayoutBis= new QVBoxLayout(centralFrameBis); | |
| CentralLayoutBis->setSpacing(0); | |
| CentralLayoutBis->setMargin(0); | |
| CentralLayoutBis->addWidget(centralToolBarBis); | |
| CentralLayoutBis->addWidget(centralFrame); | |
| splitter2->addWidget(centralFrameBis); | |
| splitter2->addWidget(Outputframe); | |
| connect(splitter2,SIGNAL(splitterMoved(int,int)), this, SLOT(splitter2Changed())); | |
| //splitter1->addWidget(splitter3); | |
| splitter1->addWidget(splitter2); | |
| splitter1->addWidget(StackedViewers); | |
| setCentralWidget(splitter1); | |
| splitter2->show(); | |
| splitter3->show(); | |
| splitter1->show(); | |
| QList<int> sizes; | |
| sizes << height()-200 << 200; | |
| splitter2->setSizes( sizes ); | |
| sizes.clear(); | |
| sizes << 180 << (int) (width()-180)*0.5 << (int) (width()-180)*0.5; | |
| splitter1->setSizes( sizes ); | |
| sizes.clear(); | |
| sizes << height()-50 << 50; | |
| splitter3->setSizes( sizes ); | |
| createStatusBar(); | |
| setupMenus(); | |
| setupToolBars(); | |
| connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardDataChanged())); | |
| QPalette pal = QApplication::palette(); | |
| QColor col=pal.color(QPalette::Window); | |
| if (new_gui) | |
| { | |
| restoreState(windowstate, 0); | |
| if (winmaximized) this->setWindowState(Qt::WindowMaximized); | |
| splitter1->restoreState(splitter1state); | |
| splitter2->restoreState(splitter2state); | |
| splitter3->restoreState(splitter3state); | |
| } | |
| ShowOutputView(false); | |
| ShowStructView(false); | |
| ShowFilesView(false); | |
| sourceviewerWidget=new SourceView(StackedViewers,EditorFont,showline,edcolors(),hicolors()); | |
| sourceviewerWidget->editor->setEncoding(input_encoding); | |
| if (wordwrap) {sourceviewerWidget->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {sourceviewerWidget->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| StackedViewers->addWidget(sourceviewerWidget); | |
| ShowPdfView(false); | |
| ShowSourceView(false); | |
| if (embedinternalpdf && builtinpdfview && showpdfview ) | |
| { | |
| StackedViewers->show(); | |
| sourceviewerWidget->hide(); | |
| } | |
| else if (showsourceview) | |
| { | |
| StackedViewers->setCurrentWidget(sourceviewerWidget); | |
| StackedViewers->show(); | |
| } | |
| else StackedViewers->hide(); | |
| UpdateRecentFile(); | |
| UpdateCaption(); | |
| singlemode=true; | |
| ToggleDocAct->setEnabled(false); | |
| MasterName=getName(); | |
| show(); | |
| #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) | |
| #if defined(Q_OS_MAC) | |
| MacSupport::addFullscreen(this); | |
| #endif | |
| #endif | |
| splitter2Changed(); | |
| LeftPanelToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| sourceviewerWidget->centralToolBar->setMinimumHeight(centralToolBarBis->height()); | |
| sourceviewerWidget->centralToolBar->setMaximumHeight(centralToolBarBis->height()); | |
| stat1->setText(QString(" %1 ").arg(tr("Normal Mode"))); | |
| //stat2->setText(QString(" %1 ").arg(tr("Ready"))); | |
| stat3->setText(QString(" %1 ").arg(input_encoding)); | |
| setAcceptDrops(true); | |
| autosaveTimer = new QTimer(this); | |
| if (autosave) | |
| { | |
| connect(autosaveTimer, SIGNAL(timeout()), this, SLOT(fileBackupAll())); | |
| autosaveTimer->start(600000); | |
| } | |
| } | |
| Texmaker::~Texmaker(){ | |
| if (spellChecker) delete spellChecker; | |
| } | |
| void Texmaker::setupMenus() | |
| { | |
| QAction *Act; | |
| bool gtkEnv=gtkSession(); | |
| //file | |
| fileMenu = menuBar()->addMenu(tr("&File")); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("document-new", QIcon(":/images/filenew.png")), tr("New"), this); | |
| else Act = new QAction(getIcon(":/images/filenew.png"), tr("New"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_N); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileNew())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("New by copying an existing file"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileNewFromFile())); | |
| fileMenu->addAction(Act); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("document-open", QIcon(":/images/fileopen.png")), tr("Open"), this); | |
| else Act = new QAction(getIcon(":/images/fileopen.png"), tr("Open"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_O); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileOpen())); | |
| fileMenu->addAction(Act); | |
| recentMenu=fileMenu->addMenu(tr("Open Recent")); | |
| for (int i = 0; i < 10; ++i) | |
| { | |
| recentFileActs[i] = new QAction(this); | |
| recentFileActs[i]->setVisible(false); | |
| connect(recentFileActs[i], SIGNAL(triggered()),this, SLOT(fileOpenRecent())); | |
| recentMenu->addAction(recentFileActs[i]); | |
| } | |
| recentMenu->addSeparator(); | |
| Act = new QAction(tr("Clean"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(CleanRecent())); | |
| recentMenu->addAction(Act); | |
| sessionMenu=fileMenu->addMenu(tr("Session")); | |
| Act = new QAction(tr("Restore previous session"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F8); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(LoadLastSession())); | |
| sessionMenu->addAction(Act); | |
| Act = new QAction(tr("Save session"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SaveSession())); | |
| sessionMenu->addAction(Act); | |
| Act = new QAction(tr("Load session"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(LoadSession())); | |
| sessionMenu->addAction(Act); | |
| if (gtkEnv) SaveAct = new QAction(QIcon::fromTheme("document-save", QIcon(":/images/filesave.png")), tr("Save"), this); | |
| else SaveAct = new QAction(getIcon(":/images/filesave.png"), tr("Save"), this); | |
| SaveAct->setShortcut(Qt::CTRL+Qt::Key_S); | |
| connect(SaveAct, SIGNAL(triggered()), this, SLOT(fileSave())); | |
| fileMenu->addAction(SaveAct); | |
| fileMenu->addSeparator(); | |
| Act = new QAction(tr("Save As"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileSaveAs())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("Save All"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileSaveAll())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("Save A Copy"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileSaveACopy())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/fileclose.png"), tr("Close"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_W); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileClose())); | |
| fileMenu->addSeparator(); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("Close All"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileCloseAll())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("Reload document from file"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileReload())); | |
| fileMenu->addAction(Act); | |
| Act = new QAction(tr("Print"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_P); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(filePrint())); | |
| fileMenu->addSeparator(); | |
| fileMenu->addAction(Act); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("application-exit", QIcon(":/images/exit.png")), tr("Exit"), this); | |
| else Act = new QAction(getIcon(":/images/exit.png"), tr("Exit"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_Q); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileExit())); | |
| fileMenu->addSeparator(); | |
| fileMenu->addAction(Act); | |
| editMenu = menuBar()->addMenu(tr("&Edit")); | |
| if (gtkEnv) UndoAct = new QAction(QIcon::fromTheme("edit-undo", QIcon(":/images/undo.png")), tr("Undo"), this); | |
| else UndoAct = new QAction(getIcon(":/images/undo.png"), tr("Undo"), this); | |
| UndoAct->setShortcut(Qt::CTRL+Qt::Key_Z); | |
| connect(UndoAct, SIGNAL(triggered()), this, SLOT(editUndo())); | |
| editMenu->addAction(UndoAct); | |
| if (gtkEnv) RedoAct = new QAction(QIcon::fromTheme("edit-redo", QIcon(":/images/redo.png")), tr("Redo"), this); | |
| else RedoAct = new QAction(getIcon(":/images/redo.png"), tr("Redo"), this); | |
| RedoAct->setShortcut(Qt::CTRL+Qt::Key_Y); | |
| connect(RedoAct, SIGNAL(triggered()), this, SLOT(editRedo())); | |
| editMenu->addAction(RedoAct); | |
| editMenu->addSeparator(); | |
| if (gtkEnv) CopyAct = new QAction(QIcon::fromTheme("edit-copy", QIcon(":/images/editcopy.png")), tr("Copy"), this); | |
| else CopyAct = new QAction(getIcon(":/images/editcopy.png"), tr("Copy"), this); | |
| CopyAct->setShortcut(Qt::CTRL+Qt::Key_C); | |
| connect(CopyAct, SIGNAL(triggered()), this, SLOT(editCopy())); | |
| editMenu->addAction(CopyAct); | |
| if (gtkEnv) CutAct = new QAction(QIcon::fromTheme("edit-cut", QIcon(":/images/editcut.png")), tr("Cut"), this); | |
| else CutAct = new QAction(getIcon(":/images/editcut.png"), tr("Cut"), this); | |
| CutAct->setShortcut(Qt::CTRL+Qt::Key_X); | |
| connect(CutAct, SIGNAL(triggered()), this, SLOT(editCut())); | |
| editMenu->addAction(CutAct); | |
| if (gtkEnv) PasteAct = new QAction(QIcon::fromTheme("edit-paste", QIcon(":/images/editpaste.png")), tr("Paste"), this); | |
| else PasteAct = new QAction(getIcon(":/images/editpaste.png"), tr("Paste"), this); | |
| PasteAct->setShortcut(Qt::CTRL+Qt::Key_V); | |
| connect(PasteAct, SIGNAL(triggered()), this, SLOT(editPaste())); | |
| editMenu->addAction(PasteAct); | |
| Act = new QAction( tr("Select All"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_A); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editSelectAll())); | |
| editMenu->addAction(Act); | |
| editMenu->addSeparator(); | |
| Act = new QAction( tr("Comment"), this); | |
| Act->setData("Comment"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_T); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editComment())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("Uncomment"), this); | |
| Act->setData("Uncomment"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_U); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editUncomment())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("Indent"), this); | |
| Act->setData("Indent"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_Greater); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editIndent())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("Unindent"), this); | |
| Act->setData("Unindent"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_Less); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editUnindent())); | |
| editMenu->addAction(Act); | |
| editMenu->addSeparator(); | |
| Act = new QAction( tr("Find"), this); | |
| Act->setData("Find"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_F); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editFind())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("FindNext"), this); | |
| Act->setData("FindNext"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_M); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editFindNext())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("Find In Directory"), this); | |
| Act->setData("Find In Directory"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editFindInDirectory())); | |
| editMenu->addAction(Act); | |
| Act = new QAction( tr("Replace"), this); | |
| Act->setData("Replace"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_R); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editReplace())); | |
| editMenu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/goto.png"), tr("Goto Line"), this); | |
| Act->setData("Goto Line"); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_G); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editGotoLine())); | |
| editMenu->addAction(Act); | |
| editMenu->addSeparator(); | |
| Act = new QAction(tr("Check Spelling"), this); | |
| Act->setData("Check Spelling"); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F7); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editSpell())); | |
| editMenu->addAction(Act); | |
| editMenu->addSeparator(); | |
| Act = new QAction(tr("Refresh Structure"), this); | |
| Act->setData("Refresh Structure"); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(refreshAll())); | |
| editMenu->addAction(Act); | |
| Act = new QAction(tr("Refresh Bibliography"), this); | |
| Act->setData("Refresh Bibliography"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UpdateBibliography())); | |
| editMenu->addAction(Act); | |
| toolMenu = menuBar()->addMenu(tr("&Tools")); | |
| Act = new QAction(getIcon(":/images/quick.png"),tr("Quick Build"), this); | |
| Act->setData(Act->text()); | |
| Act->setShortcut(Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickBuild())); | |
| toolMenu->addAction(Act); | |
| toolMenu->addSeparator(); | |
| Act = new QAction("LaTeX", this); | |
| Act->setData("LaTeX"); | |
| Act->setShortcut(Qt::Key_F2); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Latex())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(tr("View Dvi"), this); | |
| Act->setData("View Dvi"); | |
| Act->setShortcut(Qt::Key_F3); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ViewDvi())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("Dvi->PS", this); | |
| Act->setData("Dvi->PS"); | |
| Act->setShortcut(Qt::Key_F4); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(DviToPS())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(tr("View PS"), this); | |
| Act->setData("View PS"); | |
| Act->setShortcut(Qt::Key_F5); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ViewPS())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("PDFLaTeX", this); | |
| Act->setData("PDFLaTeX"); | |
| Act->setShortcut(Qt::Key_F6); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(PDFLatex())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(tr("View PDF"), this); | |
| Act->setData("View PDF"); | |
| Act->setShortcut(Qt::Key_F7); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ViewPDF())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("PS->PDF", this); | |
| Act->setData("PS->PDF"); | |
| Act->setShortcut(Qt::Key_F8); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(PStoPDF())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("DVI->PDF", this); | |
| Act->setData("DVI->PDF"); | |
| Act->setShortcut(Qt::Key_F9); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(DVItoPDF())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(tr("View Log"), this); | |
| Act->setData("View Log"); | |
| Act->setShortcut(Qt::Key_F10); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ViewLog())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("BibTeX", this); | |
| Act->setData("BibTeX"); | |
| Act->setShortcut(Qt::Key_F11); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(MakeBib())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("MakeIndex", this); | |
| Act->setData("MakeIndex"); | |
| Act->setShortcut(Qt::Key_F12); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(MakeIndex())); | |
| toolMenu->addAction(Act); | |
| toolMenu->addSeparator(); | |
| Act = new QAction("MPost", this); | |
| Act->setData("MPost"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(MetaPost())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("Asymptote", this); | |
| Act->setData("Asymptote"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Asymptote())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("Latexmk", this); | |
| Act->setData("Latexmk"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(LatexMk())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("R Sweave", this); | |
| Act->setData("R Sweave"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Sweave())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction("XeLaTeX", this); | |
| Act->setData("XeLaTeX"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Xelatex())); | |
| Act = new QAction("LuaLaTeX", this); | |
| Act->setData("LuaLaTeX"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Lualatex())); | |
| toolMenu->addAction(Act); | |
| toolMenu->addSeparator(); | |
| Act = new QAction(tr("Clean"), this); | |
| Act->setData("Clean"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(CleanAll())); | |
| toolMenu->addAction(Act); | |
| toolMenu->addSeparator(); | |
| Act = new QAction(tr("Open Terminal"), this); | |
| Act->setData("Open Terminal"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(OpenTerminal())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(tr("Export via TeX4ht"), this); | |
| Act->setData("Export via TeX4ht"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Export())); | |
| toolMenu->addAction(Act); | |
| toolMenu->addSeparator(); | |
| Act = new QAction(tr("Convert to unicode"), this); | |
| Act->setData("Convert to unicode"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ConvertToUnicode())); | |
| toolMenu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/errorprev.png"),tr("Previous LaTeX Error"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(PreviousError())); | |
| Act = new QAction(getIcon(":/images/errornext.png"),tr("Next LaTeX Error"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(NextError())); | |
| latex1Menu = menuBar()->addMenu(tr("&LaTeX")); | |
| Act = new QAction("\\documentclass", this); | |
| Act->setData("\\documentclass[10pt]{}/21/0/\\documentclass[options]{class}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\usepackage{}", this); | |
| Act->setData("\\usepackage{} /12/0/\\usepackage[options]{pkg}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("AMS packages", this); | |
| Act->setData("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n/0/3/The main American Mathematical Society packages"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\begin{document}", this); | |
| Act->setData("\\begin{document}\n\n\\end{document}/0/1/Text is allowed only between \\begin{document} and \\end{document}."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\author{}", this); | |
| Act->setData("\\author{}/8/0/\\author{names}\nThe \\author command declares the author(s), where names is a list of authors separated by \\and commands."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\title{}", this); | |
| Act->setData("\\title{}/7/0/\\title{text}\nThe \\title command declares text to be the title."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\maketitle", this); | |
| Act->setData("\\maketitle/10/0/This command generates a title on a separate title page\n- except in the article class, where the title normally goes at the top of the first page."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\tableofcontents", this); | |
| Act->setData("\\tableofcontents/16/0/Put this command where you want the table of contents to go"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| latex11Menu=latex1Menu->addMenu(tr("&Sectioning")); | |
| Act = new QAction("\\part", this); | |
| Act->setData("\\part"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\chapter", this); | |
| Act->setData("\\chapter"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\section", this); | |
| Act->setData("\\section"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\subsection", this); | |
| Act->setData("\\subsection"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\subsubsection", this); | |
| Act->setData("\\subsubsection"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\paragraph", this); | |
| Act->setData("\\paragraph"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| Act = new QAction("\\subparagraph", this); | |
| Act->setData("\\subparagraph"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertStruct())); | |
| latex11Menu->addAction(Act); | |
| latex12Menu=latex1Menu->addMenu(tr("&Environment")); | |
| Act = new QAction(getIcon(":/images/text_center.png"),"\\begin{center} [selection]", this); | |
| Act->setData("\\begin{center}\n/\n\\end{center}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_left.png"),"\\begin{flushleft} [selection]", this); | |
| Act->setData("\\begin{flushleft}\n/\n\\end{flushleft}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_right.png"),"\\begin{flushright} [selection]", this); | |
| Act->setData("\\begin{flushright}\n/\n\\end{flushright}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{quote} [selection]", this); | |
| Act->setData("\\begin{quote}\n/\n\\end{quote}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{quotation} [selection]", this); | |
| Act->setData("\\begin{quotation}\n/\n\\end{quotation}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{verse} [selection]", this); | |
| Act->setData("\\begin{verse}\n/\n\\end{verse}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{verbatim} [selection]", this); | |
| Act->setData("\\begin{verbatim}\n/\n\\end{verbatim}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{table} [selection]", this); | |
| Act->setData("\\begin{table}\n/\n\\caption{}\n\\end{table}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{figure} [selection]", this); | |
| Act->setData("\\begin{figure}\n/\n\\caption{}\n\\end{figure}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{titlepage} [selection]", this); | |
| Act->setData("\\begin{titlepage}\n/\n\\end{titlepage}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| Act = new QAction("\\begin{minipage} [selection]", this); | |
| Act->setData("\\begin{minipage}{}\n/\n\\end{minipage}/0/1"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex12Menu->addAction(Act); | |
| latex13Menu=latex1Menu->addMenu(tr("&List Environment")); | |
| Act = new QAction(getIcon(":/images/itemize.png"),"\\begin{itemize}", this); | |
| Act->setData("\\begin{itemize}\n\\item \n\\end{itemize}/6/1/The itemize environment produces a 'bulleted' list.\nEach item of an itemized list begins with an \\item command."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex13Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/enumerate.png"),"\\begin{enumerate}", this); | |
| Act->setData("\\begin{enumerate}\n\\item \n\\end{enumerate}/6/1/The enumerate environment produces a numbered list.\nEach item of an enumerated list begins with an \\item command."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex13Menu->addAction(Act); | |
| Act = new QAction("\\begin{description}", this); | |
| Act->setData("\\begin{description}\n\\item[]\n\\end{description}/6/1/The description environment is used to make labelled lists.\nEach item of the list begins with an \\item[label] command.\n"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex13Menu->addAction(Act); | |
| Act = new QAction("\\begin{list}", this); | |
| Act->setData("\\begin{list}{}{}\n\\item \n\\end{list}/13/0/\\begin{list}{label}{spacing}\nThe {label} argument is a piece of text that is inserted in a box to form the label.\nThe {spacing} argument contains commands to change the spacing parameters for the list.\nEach item of the list begins with an \\item command."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex13Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/item.png"),"\\item", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_I); | |
| Act->setData("\\item/5/0/\\item[label] Hello"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex13Menu->addAction(Act); | |
| latex14Menu=latex1Menu->addMenu(tr("Font St&yles")); | |
| Act = new QAction(getIcon(":/images/text_italic.png"),"\\textit - Italics [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_I); | |
| Act->setData("\\textit{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction("\\textsl - Slanted [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_S); | |
| Act->setData("\\textsl{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_bold.png"),"\\textbf - Boldface [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_B); | |
| Act->setData("\\textbf{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction("\\texttt - Typewriter [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_T); | |
| Act->setData("\\texttt{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction("\\textsc - Small caps [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_C); | |
| Act->setData("\\textsc{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction("\\textsf - Sans Serif [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_A); | |
| Act->setData("\\textsf{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/text_emphasis.png"),"\\emph - Emphasis [selection]", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_E); | |
| Act->setData("\\emph{/}/6/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex14Menu->addAction(Act); | |
| latex15Menu=latex1Menu->addMenu(tr("&Tabular Environment")); | |
| Act = new QAction("\\begin{tabbing}", this); | |
| Act->setData("\\begin{tabbing}\n\n\\end{tabbing}/0/1/\\begin{tabbing}\ntext \\= more text \\= still more text \\= last text \\\\\nsecond row \\> \\> more \\\\\n\\end{tabbing}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| Act = new QAction("\\begin{tabular}", this); | |
| Act->setData("\\begin{tabular}{}\n\n\\end{tabular}/16/0/\\begin{tabular}[pos]{cols}\ncolumn 1 entry & column 2 entry ... & column n entry \\\\\n...\n\\end{tabular}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| Act = new QAction("\\multicolumn", this); | |
| Act->setData("\\multicolumn{}{}{} /13/0/\\multicolumn{cols}{pos}{text}\ncol, specifies the number of columns to span.\npos specifies the formatting of the entry: c for centred, l for flushleft, r for flushright.\ntext specifies what text is to make up the entry."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| Act = new QAction("\\hline", this); | |
| Act->setData("\\hline /7/0/The \\hline command draws a horizontal line the width of the table."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| Act = new QAction("\\vline", this); | |
| Act->setData("\\vline /7/0/The \\vline command draws a vertical line extending the full height and depth of its row."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| Act = new QAction("\\cline", this); | |
| Act->setData("\\cline{-} /7/0/The \\cline{i-j} command draws horizontal lines across the columns specified, beginning in column i and ending in column j"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex15Menu->addAction(Act); | |
| latex16Menu=latex1Menu->addMenu(tr("S&pacing")); | |
| Act = new QAction("\\newpage", this); | |
| Act->setData("\\newpage /9/0/The \\newpage command ends the current page"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| Act = new QAction("\\linebreak", this); | |
| Act->setData("\\linebreak /11/0/The \\linebreak command tells LaTeX to break the current line at the point of the command."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| Act = new QAction("\\pagebreak", this); | |
| Act->setData("\\pagebreak /11/0/The \\pagebreak command tells LaTeX to break the current page at the point of the command."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| Act = new QAction("\\bigskip", this); | |
| Act->setData("\\bigskip /9/0/The \\bigskip command adds a 'big' vertical space."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| Act = new QAction("\\medskip", this); | |
| Act->setData("\\medskip /9/0/The \\medskip command adds a 'medium' vertical space."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/newline.png"),"New line", this); | |
| Act->setData("\\\\\n/0/1/The \\newline command breaks the line right where it is."); | |
| Act->setShortcut(Qt::CTRL+Qt::Key_Return); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex16Menu->addAction(Act); | |
| latex17Menu=latex1Menu->addMenu(tr("International &Accents")); | |
| Act = new QAction(getIcon(":/images/accent1.png"),"\\'{}", this); | |
| Act->setData("\\'{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent2.png"),"\\`{}", this); | |
| Act->setData("\\`{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent3.png"),"\\^{}", this); | |
| Act->setData("\\^{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent4.png"),"\\\"{}", this); | |
| Act->setData("\\\"{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent5.png"),"\\~{}", this); | |
| Act->setData("\\~{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent6.png"),"\\={}", this); | |
| Act->setData("\\={}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent7.png"),"\\.{}", this); | |
| Act->setData("\\.{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent8.png"),"\\v{}", this); | |
| Act->setData("\\v{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent9.png"),"\\u{}", this); | |
| Act->setData("\\u{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/accent10.png"),"\\H{}", this); | |
| Act->setData("\\H{}/3/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex17Menu->addAction(Act); | |
| latex18Menu=latex1Menu->addMenu(tr("International &Quotes")); | |
| Act = new QAction("French Quotes [selection]", this); | |
| Act->setData("\\og / \\fg{}/4/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex18Menu->addAction(Act); | |
| Act = new QAction("German Quotes [selection]", this); | |
| Act->setData("\\glqq /\\grqq/6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex18Menu->addAction(Act); | |
| Act = new QAction("Polish Quotes [selection]", this); | |
| Act->setData("\\quotedblbase /\\textquotedblright/14/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| latex18Menu->addAction(Act); | |
| Act = new QAction("\\includegraphics{file}", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertImage())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\include{file}", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertInclude())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\input{file}", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertInput())); | |
| latex1Menu->addAction(Act); | |
| latex1Menu->addSeparator(); | |
| Act = new QAction("\\label{}", this); | |
| Act->setData("\\label{} /7/0/\\label{key}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\cite{}", this); | |
| Act->setData("\\cite{} /6/0/\\cite{ref} :\nThis command generates an in-text citation to the reference associated with the ref entry in the bib file"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\footnote{}", this); | |
| Act->setData("\\footnote{} /10/0/\\footnote[number]{text}\nThe \\footnote command places the numbered footnote text at the bottom of the current page."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\bibliographystyle{}", this); | |
| Act->setData("\\bibliographystyle{} /19/0/The argument to \\bibliographystyle refers to a file style.bst, which defines how your citations will look"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\bibliography{}", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib())); | |
| latex1Menu->addAction(Act); | |
| Act = new QAction("\\addbibresource{}", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex())); | |
| latex1Menu->addAction(Act); | |
| math1Menu = menuBar()->addMenu(tr("&Math")); | |
| Act = new QAction(tr("Inline math mode $...$"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_M); | |
| Act->setData("$"+QString(0x2022)+"$/2/0/The math environment can be used in both paragraph and LR mode"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction(tr("Display math mode \\[...\\]"), this); | |
| Act->setShortcut(Qt::ALT+Qt::SHIFT+Qt::Key_M); | |
| Act->setData("\\["+QString(0x2022)+"\\]/3/0/The displaymath environment can be used only in paragraph mode"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction(tr("Numbered equations \\begin{equation}"), this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_N); | |
| Act->setData("\\begin{equation}\n\n\\end{equation}/0/1/The equation environment centres your equation on the page and places the equation number in the right margin."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\begin{eqnarray}", this); | |
| Act->setData("\\begin{eqnarray}\n\n\\end{eqnarray}/0/1/\\begin{eqnarray}\nmath formula 1 \\\\\n\\end{eqnarray}\nThe eqnarray environment is used to display a sequence of equations or inequalities."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\begin{align} (AMS)", this); | |
| Act->setData("\\begin{align}\n\n\\end{align}/0/1/\\begin{align}\nmath formula 1 \\\\\n\\end{align}\nThe AMS align environment is used to display a sequence of equations or inequalities."); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("_{} - subscript", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_D); | |
| Act->setData("_{}/2/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("^{} - superscript", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_U); | |
| Act->setData("^{}/2/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\frac{}{}", this); | |
| Act->setShortcut(Qt::ALT+Qt::SHIFT+Qt::Key_F); | |
| Act->setData("\\frac{}{}/6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\dfrac{}{}", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F); | |
| Act->setData("\\dfrac{}{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\sqrt{}", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_Q); | |
| Act->setData("\\sqrt{}/6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\left", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_L); | |
| Act->setData("\\left /6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\right", this); | |
| Act->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_R); | |
| Act->setData("\\right /7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| Act = new QAction("\\begin{array}", this); | |
| Act->setData("\\begin{array}{}\n\n\\end{array}/14/0/\\begin{array}{col1col2...coln}\ncolumn 1 entry & column 2 entry ... & column n entry \\\\\n...\n\\end{array}"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math1Menu->addAction(Act); | |
| math14Menu=math1Menu->addMenu(tr("Math &Functions")); | |
| Act = new QAction("\\arccos", this); | |
| Act->setData("\\arccos /8/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\arcsin", this); | |
| Act->setData("\\arcsin /8/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\arctan", this); | |
| Act->setData("\\arctan /8/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\cos", this); | |
| Act->setData("\\cos /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\cosh", this); | |
| Act->setData("\\cosh /6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\cot", this); | |
| Act->setData("\\cot /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\coth", this); | |
| Act->setData("\\coth /6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\csc", this); | |
| Act->setData("\\csc /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\deg", this); | |
| Act->setData("\\deg /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\det", this); | |
| Act->setData("\\det /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\dim", this); | |
| Act->setData("\\dim /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\exp", this); | |
| Act->setData("\\exp /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\gcd", this); | |
| Act->setData("\\gcd /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\hom", this); | |
| Act->setData("\\hom /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\inf", this); | |
| Act->setData("\\inf /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\ker", this); | |
| Act->setData("\\ker /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\lg", this); | |
| Act->setData("\\lg /4/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\lim", this); | |
| Act->setData("\\lim /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\liminf", this); | |
| Act->setData("\\liminf /8/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\limsup", this); | |
| Act->setData("\\limsup /8/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\ln", this); | |
| Act->setData("\\ln /4/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\log", this); | |
| Act->setData("\\log /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\max", this); | |
| Act->setData("\\max /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\min", this); | |
| Act->setData("\\min /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\sec", this); | |
| Act->setData("\\sec /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\sin", this); | |
| Act->setData("\\sin /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\sinh", this); | |
| Act->setData("\\sinh /6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\sup", this); | |
| Act->setData("\\sup /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\tan", this); | |
| Act->setData("\\tan /5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| Act = new QAction("\\tanh", this); | |
| Act->setData("\\tanh /6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math14Menu->addAction(Act); | |
| math11Menu=math1Menu->addMenu(tr("Math Font St&yles")); | |
| Act = new QAction("\\mathrm{} [selection]", this); | |
| Act->setData("\\mathrm{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathit{} [selection]", this); | |
| Act->setData("\\mathit{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathbf{} [selection]", this); | |
| Act->setData("\\mathbf{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathsf{} [selection]", this); | |
| Act->setData("\\mathsf{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathtt{} [selection]", this); | |
| Act->setData("\\mathtt{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathcal{} [selection]", this); | |
| Act->setData("\\mathcal{/}/9/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathbb{} [selection]", this); | |
| Act->setData("\\mathbb{/}/8/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| Act = new QAction("\\mathfrak{} [selection]", this); | |
| Act->setData("\\mathfrak{/}/10/0"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertWithSelectionFromAction())); | |
| math11Menu->addAction(Act); | |
| math12Menu=math1Menu->addMenu(tr("Math &Accents")); | |
| Act = new QAction(getIcon(":/images/acute.png"),"\\acute{}", this); | |
| Act->setData("\\acute{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/grave.png"),"\\grave{}", this); | |
| Act->setData("\\grave{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/tilde.png"),"\\tilde{}", this); | |
| Act->setData("\\tilde{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/bar.png"),"\\bar{}", this); | |
| Act->setData("\\bar{}/5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/vec.png"),"\\vec{}", this); | |
| Act->setData("\\vec{}/5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/hat.png"),"\\hat{}", this); | |
| Act->setData("\\hat{}/5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/check.png"),"\\check{}", this); | |
| Act->setData("\\check{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/breve.png"),"\\breve{}", this); | |
| Act->setData("\\breve{}/7/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/dot.png"),"\\dot{}", this); | |
| Act->setData("\\dot{}/5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| Act = new QAction(getIcon(":/images/ddot.png"),"\\ddot{}", this); | |
| Act->setData("\\ddot{}/6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math12Menu->addAction(Act); | |
| math13Menu=math1Menu->addMenu(tr("Math S&paces")); | |
| Act = new QAction("small", this); | |
| Act->setData("\\,/2/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math13Menu->addAction(Act); | |
| Act = new QAction("medium", this); | |
| Act->setData("\\:/2/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math13Menu->addAction(Act); | |
| Act = new QAction("large", this); | |
| Act->setData("\\;/2/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math13Menu->addAction(Act); | |
| Act = new QAction("\\quad", this); | |
| Act->setData("\\quad/5/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math13Menu->addAction(Act); | |
| Act = new QAction("\\qquad", this); | |
| Act->setData("\\qquad/6/0/ "); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertFromAction())); | |
| math13Menu->addAction(Act); | |
| wizardMenu = menuBar()->addMenu(tr("&Wizard")); | |
| Act = new QAction(tr("Quick Start"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickDocument())); | |
| wizardMenu->addAction(Act); | |
| Act = new QAction(tr("Quick Beamer Presentation"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickBeamer())); | |
| wizardMenu->addAction(Act); | |
| Act = new QAction(tr("Quick Letter"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickLetter())); | |
| wizardMenu->addAction(Act); | |
| wizardMenu->addSeparator(); | |
| Act = new QAction(tr("Quick Tabular"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickTabular())); | |
| wizardMenu->addAction(Act); | |
| Act = new QAction(tr("Quick Tabbing"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickTabbing())); | |
| wizardMenu->addAction(Act); | |
| Act = new QAction(tr("Quick Array"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(QuickArray())); | |
| wizardMenu->addAction(Act); | |
| bibMenu = menuBar()->addMenu(tr("&Bibliography")); | |
| bibtexMenu=bibMenu->addMenu("Bibtex"); | |
| Act = new QAction("Article in Journal", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib1())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Article in Conference Proceedings", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib2())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Article in a collection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib3())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Chapter or Pages in a Book", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib4())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Conference Proceedings", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib5())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Book", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib6())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Booklet", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib7())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("PhD. Thesis", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib8())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Master's Thesis", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib9())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Technical Report", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib10())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Technical Manual", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib11())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Unpublished", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib12())); | |
| bibtexMenu->addAction(Act); | |
| Act = new QAction("Miscellaneous", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBib13())); | |
| bibtexMenu->addAction(Act); | |
| biblatexMenu=bibMenu->addMenu("Biblatex"); | |
| Act = new QAction("Article in Journal", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex1())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Single-volume book", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex2())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Multi-volume book", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex3())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Part of a book", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex4())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Booklet", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex5())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Single-volume collection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex6())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Multi-volume collection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex7())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Part of a collection", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex8())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Technical documentation", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex9())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Miscellaneous", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex10())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Online resource", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex11())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Issue of a periodical", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex12())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Single-volume conference proceedings", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex13())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Multi-volume conference proceedings", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex14())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Article in conference proceedings", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex15())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Technical report", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex16())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Thesis", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex17())); | |
| biblatexMenu->addAction(Act); | |
| Act = new QAction("Patent", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertBibLatex18())); | |
| biblatexMenu->addAction(Act); | |
| bibMenu->addSeparator(); | |
| Act = new QAction(tr("Clean"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(CleanBib())); | |
| bibMenu->addAction(Act); | |
| user1Menu = menuBar()->addMenu(tr("&User")); | |
| user11Menu=user1Menu->addMenu(tr("User &Tags")); | |
| Act = new QAction("1: "+UserMenuName[0], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag1())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("2: "+UserMenuName[1], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F2); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag2())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("3: "+UserMenuName[2], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F3); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag3())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("4: "+UserMenuName[3], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F4); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag4())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("5: "+UserMenuName[4], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F5); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag5())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("6: "+UserMenuName[5], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F6); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag6())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("7: "+UserMenuName[6], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F7); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag7())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("8: "+UserMenuName[7], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F8); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag8())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("9: "+UserMenuName[8], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F9); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag9())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("10: "+UserMenuName[9], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F10); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag10())); | |
| user11Menu->addAction(Act); | |
| user11Menu->addSeparator(); | |
| Act = new QAction(tr("Edit User &Tags"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(EditUserMenu())); | |
| user11Menu->addAction(Act); | |
| user12Menu=user1Menu->addMenu(tr("User &Commands")); | |
| Act = new QAction("1: "+UserToolName[0], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool1())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("2: "+UserToolName[1], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F2); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool2())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("3: "+UserToolName[2], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F3); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool3())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("4: "+UserToolName[3], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F4); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool4())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("5: "+UserToolName[4], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F5); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool5())); | |
| user12Menu->addAction(Act); | |
| user12Menu->addSeparator(); | |
| Act = new QAction(tr("Edit User &Commands"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(EditUserTool())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction(tr("Customize Completion"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(EditUserCompletion())); | |
| user1Menu->addAction(Act); | |
| user1Menu->addSeparator(); | |
| Act = new QAction(tr("Run script"), this); | |
| Act->setData("Run script"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(editRunScript())); | |
| user1Menu->addAction(Act); | |
| viewMenu = menuBar()->addMenu(tr("&View")); | |
| NextDocAct = new QAction(tr("Next Document"), this); | |
| NextDocAct->setData("Next"); | |
| NextDocAct->setShortcut(Qt::ALT+Qt::Key_PageDown); | |
| connect(NextDocAct, SIGNAL(triggered()), this, SLOT(gotoNextDocument())); | |
| viewMenu->addAction(NextDocAct); | |
| PrevDocAct = new QAction(tr("Previous Document"), this); | |
| PrevDocAct->setData("Prev"); | |
| PrevDocAct->setShortcut(Qt::ALT+Qt::Key_PageUp); | |
| connect(PrevDocAct, SIGNAL(triggered()), this, SLOT(gotoPrevDocument())); | |
| viewMenu->addAction(PrevDocAct); | |
| viewMenu->addSeparator(); | |
| ViewStructurePanelAct = new QAction(tr("Structure"), this); | |
| ViewStructurePanelAct->setCheckable(true); | |
| connect(ViewStructurePanelAct, SIGNAL(triggered()), this, SLOT(ToggleStructurePanel())); | |
| ViewStructurePanelAct->setChecked(showstructview); | |
| viewMenu->addAction(ViewStructurePanelAct); | |
| ViewLogPanelAct = new QAction(tr("Messages / Log File"), this); | |
| ViewLogPanelAct->setCheckable(true); | |
| ViewLogPanelAct->setChecked(showoutputview); | |
| connect(ViewLogPanelAct, SIGNAL(triggered()), this, SLOT(ToggleLogPanel())); | |
| viewMenu->addAction(ViewLogPanelAct); | |
| ViewPdfPanelAct = new QAction(tr("Pdf Viewer"), this); | |
| ViewPdfPanelAct->setCheckable(true); | |
| ViewPdfPanelAct->setChecked(showpdfview); | |
| connect(ViewPdfPanelAct, SIGNAL(triggered()), this, SLOT(TogglePdfPanel())); | |
| if (embedinternalpdf) | |
| { | |
| viewMenu->addAction(ViewPdfPanelAct); | |
| if (builtinpdfview) ViewPdfPanelAct->setEnabled(true); | |
| else ViewPdfPanelAct->setEnabled(false); | |
| } | |
| ViewSourcePanelAct = new QAction("Source Viewer", this); | |
| ViewSourcePanelAct->setCheckable(true); | |
| ViewSourcePanelAct->setChecked(showsourceview); | |
| connect(ViewSourcePanelAct, SIGNAL(triggered()), this, SLOT(ToggleSourcePanel())); | |
| viewMenu->addAction(ViewSourcePanelAct); | |
| ViewOpenedFilesPanelAct= new QAction(tr("List of opened files"), this); | |
| ViewOpenedFilesPanelAct->setCheckable(true); | |
| ViewOpenedFilesPanelAct->setChecked(showfilesview); | |
| connect(ViewOpenedFilesPanelAct, SIGNAL(triggered()), this, SLOT(ToggleFilesPanel())); | |
| viewMenu->addAction(ViewOpenedFilesPanelAct); | |
| viewMenu->addSeparator(); | |
| FullScreenAct = new QAction(tr("Full Screen"), this); | |
| FullScreenAct->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_F11); | |
| FullScreenAct->setCheckable(true); | |
| FullScreenAct->setChecked(false); | |
| connect(FullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen())); | |
| viewMenu->addAction(FullScreenAct); | |
| optionsMenu = menuBar()->addMenu(tr("&Options")); | |
| Act = new QAction(getIcon(":/images/configure.png"), tr("Configure Texmaker"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(GeneralOptions())); | |
| optionsMenu->addAction(Act); | |
| optionsMenu->addSeparator(); | |
| ToggleAct = new QAction(tr("Define Current Document as 'Master Document'"), this); | |
| connect(ToggleAct, SIGNAL(triggered()), this, SLOT(ToggleMode())); | |
| optionsMenu->addAction(ToggleAct); | |
| optionsMenu->addSeparator(); | |
| appearanceMenu=optionsMenu->addMenu(tr("Interface Appearance")); | |
| appearanceGroup = new QActionGroup(this); | |
| Act = new QAction("Modern", this); | |
| Act->setCheckable(true); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(updateAppearance())); | |
| appearanceGroup->addAction(Act); | |
| if (modern_style) Act->setChecked(true); | |
| appearanceMenu->addAction(Act); | |
| Act = new QAction("Classic", this); | |
| Act->setCheckable(true); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(updateAppearance())); | |
| appearanceGroup->addAction(Act); | |
| if (!modern_style) Act->setChecked(true); | |
| appearanceMenu->addAction(Act); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| Act = new QAction(tr("Change Interface Font"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(SetInterfaceFont())); | |
| optionsMenu->addAction(Act); | |
| #endif | |
| optionsMenu->addSeparator(); | |
| translationMenu=optionsMenu->addMenu(tr("Interface Language")); | |
| translationGroup = new QActionGroup(this); | |
| QString currentTranslation=TexmakerApp::instance()->language; | |
| for (int i=0; i < translationList.count(); i++) | |
| { | |
| Act = new QAction(translationList.at(i), this); | |
| Act->setCheckable(true); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(updateTranslation())); | |
| translationGroup->addAction(Act); | |
| if ((currentTranslation==translationList.at(i)) || (currentTranslation.left(2)==translationList.at(i)) ) | |
| { | |
| Act->setChecked(true); | |
| } | |
| translationMenu->addAction(Act); | |
| } | |
| optionsMenu->addSeparator(); | |
| #if defined(Q_OS_MAC) | |
| settingsMenu=optionsMenu->addMenu(tr("Manage Settings File")); | |
| #else | |
| settingsMenu=optionsMenu->addMenu(tr("Settings File")); | |
| #endif | |
| Act = new QAction( tr("Reset Settings"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(DeleteSettings())); | |
| settingsMenu->addAction(Act); | |
| Act = new QAction( tr("Save a copy of the settings file"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(CopySettings())); | |
| settingsMenu->addAction(Act); | |
| Act = new QAction( tr("Replace the settings file by a new one"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ReplaceSettings())); | |
| settingsMenu->addAction(Act); | |
| helpMenu = menuBar()->addMenu(tr("&Help")); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("help-contents", QIcon(":/images/help.png")), tr("LaTeX Reference"), this); | |
| else Act = new QAction(getIcon(":/images/help.png"), tr("LaTeX Reference"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(LatexHelp())); | |
| helpMenu->addAction(Act); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("help-contents", QIcon(":/images/help.png")), tr("User Manual"), this); | |
| else Act = new QAction(getIcon(":/images/help.png"), tr("User Manual"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserManualHelp())); | |
| helpMenu->addAction(Act); | |
| helpMenu->addSeparator(); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("help-contents", QIcon(":/images/help.png")), "TexDoc [selection]", this); | |
| else Act = new QAction(getIcon(":/images/help.png"), "TexDoc [selection]", this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(TexDocHelp())); | |
| helpMenu->addAction(Act); | |
| QString locale = QString(QLocale::system().name()).left(2); | |
| if (locale=="fr") | |
| { | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("help-contents", QIcon(":/images/help.png")), QString::fromUtf8("Documentation LaTeX/Texmaker en ligne"), this); | |
| else Act = new QAction(getIcon(":/images/help.png"), QString::fromUtf8("Documentation LaTeX/Texmaker en ligne"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Docufrlatex())); | |
| helpMenu->addAction(Act); | |
| } | |
| else | |
| { | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("help-contents", QIcon(":/images/help.png")), QString::fromUtf8("LaTeX wikibook"), this); | |
| else Act = new QAction(getIcon(":/images/help.png"), QString::fromUtf8("LaTeX wikibook"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(Doculatex())); | |
| helpMenu->addAction(Act); | |
| } | |
| helpMenu->addSeparator(); | |
| Act = new QAction( tr("Check for Update"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(CheckVersion())); | |
| helpMenu->addAction(Act); | |
| helpMenu->addSeparator(); | |
| Act = new QAction(getIcon(":/images/appicon.png"), tr("About Texmaker"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(HelpAbout())); | |
| helpMenu->addAction(Act); | |
| QList<QAction *> listaction; | |
| KeysMap::Iterator its; | |
| bool hasNextPrev=false; | |
| bool hasQuote=false; | |
| bool hasTools=false; | |
| bool hasEdit=false; | |
| if (shortcuts.isEmpty()) | |
| { | |
| actionstext.clear(); | |
| listaction << toolMenu->actions(); | |
| listaction << editMenu->actions(); | |
| listaction << NextDocAct << PrevDocAct; | |
| listaction << latex1Menu->actions(); | |
| listaction << latex11Menu->actions(); | |
| listaction << latex12Menu->actions(); | |
| listaction << latex13Menu->actions(); | |
| listaction << latex14Menu->actions(); | |
| listaction << latex15Menu->actions(); | |
| listaction << latex16Menu->actions(); | |
| listaction << latex17Menu->actions(); | |
| listaction << latex18Menu->actions(); | |
| listaction << math1Menu->actions(); | |
| listaction << math11Menu->actions(); | |
| listaction << math12Menu->actions(); | |
| listaction << math13Menu->actions(); | |
| listaction << math14Menu->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action = iterator.next(); | |
| if (action && (!action->menu()) && (!action->data().toString().isEmpty())) | |
| { | |
| if (action->shortcut().isEmpty()) shortcuts.insert(action->data().toString(),"none"); | |
| else shortcuts.insert(action->data().toString(),action->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(action->data().toString(),action->text()); | |
| } | |
| } | |
| } | |
| else | |
| { | |
| for( its = shortcuts.begin(); its != shortcuts.end(); ++its ) | |
| { | |
| if (its.key()=="Next") hasNextPrev=true; | |
| if (its.key().contains("\\glqq / \\grqq")) hasQuote=true; | |
| if (its.key()=="LaTeX") hasTools=true; | |
| if (its.key()=="Comment") hasEdit=true; | |
| } | |
| if (!hasNextPrev) | |
| { | |
| shortcuts.insert(NextDocAct->data().toString(),NextDocAct->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(NextDocAct->data().toString(),NextDocAct->text()); | |
| shortcuts.insert(PrevDocAct->data().toString(),PrevDocAct->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(PrevDocAct->data().toString(),PrevDocAct->text()); | |
| } | |
| if (!hasQuote) | |
| { | |
| shortcuts.insert(latex18Menu->actions().at(0)->data().toString(),latex18Menu->actions().at(0)->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(latex18Menu->actions().at(0)->data().toString(),latex18Menu->actions().at(0)->text()); | |
| shortcuts.insert(latex18Menu->actions().at(1)->data().toString(),latex18Menu->actions().at(1)->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(latex18Menu->actions().at(1)->data().toString(),latex18Menu->actions().at(1)->text()); | |
| } | |
| if (!hasTools) | |
| { | |
| listaction << toolMenu->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action = iterator.next(); | |
| if (action && (!action->menu()) && (!action->data().toString().isEmpty())) | |
| { | |
| if (action->shortcut().isEmpty()) shortcuts.insert(action->data().toString(),"none"); | |
| else shortcuts.insert(action->data().toString(),action->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(action->data().toString(),action->text()); | |
| } | |
| } | |
| } | |
| listaction.clear(); | |
| if (!hasEdit) | |
| { | |
| listaction << editMenu->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action = iterator.next(); | |
| if (action && (!action->menu()) && (!action->data().toString().isEmpty())) | |
| { | |
| if (action->shortcut().isEmpty()) shortcuts.insert(action->data().toString(),"none"); | |
| else shortcuts.insert(action->data().toString(),action->shortcut().toString(QKeySequence::PortableText)); | |
| actionstext.insert(action->data().toString(),action->text()); | |
| } | |
| } | |
| } | |
| ModifyShortcuts(); | |
| } | |
| } | |
| void Texmaker::setupToolBars() | |
| { | |
| QAction *Act; | |
| QStringList list; | |
| bool gtkEnv=gtkSession(); | |
| //file | |
| fileToolBar = addToolBar("File ToolBar"); | |
| fileToolBar->setObjectName("File"); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("document-new", QIcon(":/images/filenew.png")), tr("New"), this); | |
| else Act = new QAction(getIcon(":/images/filenew.png"), tr("New"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileNew())); | |
| fileToolBar->addAction(Act); | |
| if (gtkEnv) Act = new QAction(QIcon::fromTheme("document-open", QIcon(":/images/fileopen.png")), tr("Open"), this); | |
| else Act = new QAction(getIcon(":/images/fileopen.png"), tr("Open"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(fileOpen())); | |
| fileToolBar->addAction(Act); | |
| //Act = new QAction(QIcon(":/images/filesave.png"), tr("Save"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(fileSave())); | |
| fileToolBar->addAction(SaveAct); | |
| //Act = new QAction(QIcon(":/images/fileclose.png"), tr("Close"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(fileClose())); | |
| //fileToolBar->addAction(Act); | |
| //edit | |
| editToolBar = addToolBar("Edit ToolBar"); | |
| editToolBar->setObjectName("Edit"); | |
| //Act = new QAction(QIcon(":/images/undo.png"), tr("Undo"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(editUndo())); | |
| editToolBar->addAction(UndoAct); | |
| //Act = new QAction(QIcon(":/images/redo.png"), tr("Redo"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(editRedo())); | |
| editToolBar->addAction(RedoAct); | |
| //Act = new QAction(QIcon(":/images/editcopy.png"), tr("Copy"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(editCopy())); | |
| editToolBar->addAction(CopyAct); | |
| //Act = new QAction(QIcon(":/images/editcut.png"), tr("Cut"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(editCut())); | |
| editToolBar->addAction(CutAct); | |
| //Act = new QAction(QIcon(":/images/editpaste.png"), tr("Paste"), this); | |
| //connect(Act, SIGNAL(triggered()), this, SLOT(editPaste())); | |
| editToolBar->addAction(PasteAct); | |
| //format | |
| //formatToolBar = addToolBar("Format ToolBar"); | |
| //formatToolBar->setObjectName("Format"); | |
| //insertToolBarBreak(formatToolBar); | |
| //tools | |
| runToolBar = addToolBar("Tools Toolbar"); | |
| runToolBar->setObjectName("Tools"); | |
| list.clear(); | |
| list.append(tr("Quick Build")); | |
| list.append("LaTeX"); | |
| list.append("Dvi->PS"); | |
| list.append("PDFLaTeX"); | |
| list.append("BibTeX"); | |
| list.append("MakeIndex"); | |
| list.append("MPost"); | |
| list.append("PS->PDF"); | |
| list.append("DVI->PDF"); | |
| list.append("Asymptote"); | |
| list.append("LatexMk"); | |
| list.append("R Sweave"); | |
| list.append("XeLaTeX"); | |
| list.append("LuaLaTeX"); | |
| for ( int i = 0; i <= 4; i++ ) list.append(QString::number(i+1)+": "+UserToolName[i]); | |
| comboCompil = new QComboBox(runToolBar); | |
| comboCompil->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); | |
| comboCompil->addItems(list); | |
| comboCompil->setCurrentIndex(runIndex); | |
| connect(runToolBar->addAction(getIcon(":/images/run.png"),tr("Run")), SIGNAL(triggered()), this, SLOT(doCompile())); | |
| runToolBar->addWidget(comboCompil); | |
| list.clear(); | |
| list.append(tr("View Dvi")); | |
| list.append(tr("View PS")); | |
| list.append(tr("View PDF")); | |
| comboView = new QComboBox(runToolBar); | |
| comboView->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); | |
| comboView->addItems(list); | |
| comboView->setCurrentIndex(viewIndex); | |
| connect(runToolBar->addAction(getIcon(":/images/run.png"),tr("View")), SIGNAL(triggered()), this, SLOT(doView())); | |
| runToolBar->addWidget(comboView); | |
| Act = new QAction(getIcon(":/images/viewlog.png"),tr("View Log"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(ViewLog())); | |
| logToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/errornext.png"),tr("Next LaTeX Error"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(NextError())); | |
| Act->setShortcut(Qt::ALT+Qt::Key_Down); | |
| Act->setToolTip("Alt+Down"); | |
| logToolBar->addAction(Act); | |
| Act = new QAction(getIcon(":/images/errorprev.png"),tr("Previous LaTeX Error"), this); | |
| Act->setShortcut(Qt::ALT+Qt::Key_Up); | |
| Act->setToolTip("Alt+Up"); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(PreviousError())); | |
| logToolBar->addAction(Act); | |
| StopAct = new QAction(getIcon(":/images/process-stop.png"),tr("Stop Process"), this); | |
| connect(StopAct, SIGNAL(triggered()), this, SLOT(stopProcess())); | |
| logToolBar->addAction(StopAct); | |
| StopAct->setEnabled(false); | |
| viewMenu->addSeparator(); | |
| viewMenu->addAction(fileToolBar->toggleViewAction()); | |
| viewMenu->addAction(editToolBar->toggleViewAction()); | |
| //viewMenu->addAction(formatToolBar->toggleViewAction()); | |
| viewMenu->addAction(runToolBar->toggleViewAction()); | |
| } | |
| void Texmaker::createStatusBar() | |
| { | |
| toggleStructureButton=new PlayerButton(statusBar()); | |
| toggleStructureButton->setImages("structure_button"); | |
| connect(toggleStructureButton, SIGNAL( clicked() ), this, SLOT(ToggleStructurePanel() ) ); | |
| statusBar()->addPermanentWidget(toggleStructureButton,0); | |
| toggleLogButton=new PlayerButton(statusBar()); | |
| toggleLogButton->setImages("log_button"); | |
| connect(toggleLogButton, SIGNAL( clicked() ), this, SLOT(ToggleLogPanel() ) ); | |
| statusBar()->addPermanentWidget(toggleLogButton,0); | |
| togglePdfButton=new PlayerButton(statusBar()); | |
| togglePdfButton->setImages("pdf_button"); | |
| connect(togglePdfButton, SIGNAL( clicked() ), this, SLOT(TogglePdfPanel() ) ); | |
| statusBar()->addPermanentWidget(togglePdfButton,0); | |
| toggleSourceButton=new PlayerButton(statusBar()); | |
| toggleSourceButton->setImages("source_button"); | |
| connect(toggleSourceButton, SIGNAL( clicked() ), this, SLOT(ToggleSourcePanel() ) ); | |
| statusBar()->addPermanentWidget(toggleSourceButton,0); | |
| if (embedinternalpdf && builtinpdfview) togglePdfButton->show(); | |
| else togglePdfButton->hide(); | |
| stat2=new QLabel( statusBar() ); | |
| stat2->setText("Ready"); | |
| statusBar()->addPermanentWidget(stat2,0); | |
| statusBar()->addPermanentWidget(new QLabel(),1); | |
| stat1=new QLabel(statusBar()); | |
| stat3=new QLabel(statusBar() ); | |
| statusBar()->addPermanentWidget(stat3,0); | |
| statusBar()->addPermanentWidget(stat1,0); | |
| toggleStructureButton->setEnabled(showstructview); | |
| toggleLogButton->setEnabled(showoutputview); | |
| togglePdfButton->setEnabled(showpdfview); | |
| toggleSourceButton->setEnabled(showsourceview); | |
| } | |
| void Texmaker::UpdateCaption() | |
| { | |
| QString title; | |
| if ( !currentEditorView() ) {title="Texmaker";} | |
| else | |
| { | |
| title="Document : "+getName(); | |
| //input_encoding=currentEditorView()->editor->getEncoding(); | |
| } | |
| setWindowTitle(title); | |
| //UpdateStructure(); | |
| if (singlemode) | |
| { | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| if (splitter2->sizes().at(1)>0) OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| logpresent=false; | |
| } | |
| QString finame=getName(); | |
| int check=comboFiles->findData(finame,Qt::UserRole,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| comboFiles->setCurrentIndex(check); | |
| if ((check>-1) && (check<OpenedFilesListWidget->count())) OpenedFilesListWidget->setCurrentRow(check); | |
| if (!finame.startsWith("untitled") && finame!="") | |
| { | |
| lastDocument=finame; | |
| } | |
| if (currentEditorView()) | |
| { | |
| SaveAct->setEnabled(currentEditorView()->editor->document()->isModified()); | |
| UndoAct->setEnabled(currentEditorView()->editor->document()->isUndoAvailable()); | |
| RedoAct->setEnabled(currentEditorView()->editor->document()->isRedoAvailable()); | |
| CopyAct->setEnabled(currentEditorView()->editor->textCursor().hasSelection()); | |
| CutAct->setEnabled(currentEditorView()->editor->textCursor().hasSelection()); | |
| stat3->setText(QString(" %1 ").arg(currentEditorView()->editor->getEncoding())); | |
| } | |
| else | |
| { | |
| SaveAct->setEnabled(false); | |
| UndoAct->setEnabled(false); | |
| RedoAct->setEnabled(false); | |
| CopyAct->setEnabled(false); | |
| CutAct->setEnabled(false); | |
| stat3->setText(QString(" %1 ").arg(input_encoding)); | |
| } | |
| if (currentEditorView()) | |
| { | |
| currentEditorView()->editor->setFocus(); | |
| showCursorPos(currentEditorView()->editor->textCursor().blockNumber() + 1,currentEditorView()->editor->textCursor().position() - currentEditorView()->editor->textCursor().block().position()+1); | |
| // showCursorPos(currentEditorView()->editor->textCursor().blockNumber() + 1,currentEditorView()->editor->textCursor().position() - currentEditorView()->editor->document()->findBlock(currentEditorView()->editor->textCursor().selectionStart()).position()); | |
| } | |
| else posLabel->setText("L: C: "); | |
| } | |
| void Texmaker::NewDocumentStatus(bool m) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString finame=getName(); | |
| int check=comboFiles->findData(finame,Qt::UserRole,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| if ((check>-1) && (check<OpenedFilesListWidget->count())) OpenedFilesListWidget->setCurrentRow(check); | |
| if (m) | |
| { | |
| //EditorView->setTabIcon(EditorView->indexOf(currentEditorView()),getIcon(":/images/modified.png")); | |
| //EditorView->setTabText(EditorView->indexOf(currentEditorView()),QFileInfo( getName() ).fileName()); | |
| comboFiles->setItemIcon(comboFiles->findData(finame,Qt::UserRole,Qt::MatchExactly | Qt::MatchCaseSensitive),getIcon(":/images/modified.png")); | |
| if ((check>-1) && (check<OpenedFilesListWidget->count())) OpenedFilesListWidget->item(check)->setIcon(getIcon(":/images/modified.png")); | |
| SaveAct->setEnabled(true); | |
| } | |
| else | |
| { | |
| //EditorView->setTabIcon(EditorView->indexOf(currentEditorView()),getIcon(":/images/empty.png")); | |
| //EditorView->setTabText(EditorView->indexOf(currentEditorView()),QFileInfo( getName() ).fileName()); | |
| comboFiles->setItemIcon(comboFiles->findData(finame,Qt::UserRole,Qt::MatchExactly | Qt::MatchCaseSensitive),QIcon(":/images/empty.png")); | |
| if ((check>-1) && (check<OpenedFilesListWidget->count())) OpenedFilesListWidget->item(check)->setIcon(QIcon(":/images/empty.png")); | |
| SaveAct->setEnabled(false); | |
| } | |
| } | |
| LatexEditorView *Texmaker::currentEditorView() const | |
| { | |
| if ( EditorView->currentWidget() && EditorView->currentWidget()->inherits( "LatexEditorView" ) ) return (LatexEditorView*)EditorView->currentWidget(); | |
| return 0; | |
| } | |
| QString Texmaker::getName() | |
| { | |
| QString title; | |
| if ( !currentEditorView() ) {title="";} | |
| else {title=filenames[currentEditorView()];} | |
| return title; | |
| } | |
| bool Texmaker::FileAlreadyOpen(QString f) | |
| { | |
| bool rep=false; | |
| FilesMap::Iterator it; | |
| QString fw32,funix,forig, canorig, can; | |
| canorig=QFileInfo(f).canonicalFilePath(); | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| forig=filenames[it.key()]; | |
| fw32=filenames[it.key()]; | |
| funix=filenames[it.key()]; | |
| fw32.replace(QString("\\"),QString("/")); | |
| funix.replace(QString("/"),QString("\\")); | |
| can=QFileInfo(filenames[it.key()]).canonicalFilePath(); | |
| if ( (forig==f) || (fw32==f) || (funix==f) || (canorig==can)) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| rep=true; | |
| } | |
| } | |
| return rep; | |
| } | |
| void Texmaker::ComboFilesInsert(const QString & file) | |
| { | |
| int index; | |
| QString fname = QFileInfo( file ).fileName(); | |
| for (index=0; index<comboFiles->count(); index++) | |
| if (comboFiles->itemText(index).localeAwareCompare(fname) > 0) break; | |
| comboFiles->insertItem(index, fname, file); | |
| comboFiles->setItemIcon(index,QIcon(":/images/empty.png")); | |
| OpenedFilesListWidget->insertItem(index,fname); | |
| OpenedFilesListWidget->item(index)->setIcon(QIcon(":/images/empty.png")); | |
| } | |
| ///////////////////FILE////////////////////////////////////// | |
| void Texmaker::load( const QString &f ) | |
| { | |
| if (FileAlreadyOpen(f) || !QFile::exists( f )) return; | |
| QFileInfo fi(f); | |
| if (fi.suffix()=="tks") | |
| { | |
| LoadSessionFile(f); | |
| return; | |
| } | |
| QFile file( f ); | |
| if ( !file.open( QIODevice::ReadOnly ) ) | |
| { | |
| QMessageBox::warning( this,tr("Error"), tr("You do not have read permission to this file.")); | |
| return; | |
| } | |
| bool hasDecodingError=false; | |
| QByteArray buf = file.readAll(); | |
| int bytesRead = buf.size(); | |
| file.close(); | |
| QTextCodec* detected_codec; | |
| QTextCodec* codec = QTextCodec::codecForName(input_encoding.toLatin1()); | |
| if(!codec) codec = QTextCodec::codecForLocale(); | |
| QString text = codec->toUnicode(buf); | |
| QByteArray verifyBuf = codec->fromUnicode(text); | |
| QString new_encoding=""; | |
| // unicode detection | |
| if (bytesRead >= 4 && ((uchar(buf[0]) == 0xff && uchar(buf[1]) == 0xfe && uchar(buf[2]) == 0 && uchar(buf[3]) == 0) || (uchar(buf[0]) == 0 && uchar(buf[1]) == 0 && uchar(buf[2]) == 0xfe && uchar(buf[3]) == 0xff))) | |
| { | |
| detected_codec = QTextCodec::codecForName("UTF-32"); | |
| if (detected_codec) new_encoding=detected_codec->name(); | |
| } | |
| else if (bytesRead >= 2 && ((uchar(buf[0]) == 0xff && uchar(buf[1]) == 0xfe) || (uchar(buf[0]) == 0xfe && uchar(buf[1]) == 0xff))) | |
| { | |
| detected_codec = QTextCodec::codecForName("UTF-16"); | |
| if (detected_codec) new_encoding=detected_codec->name(); | |
| } | |
| else if (bytesRead >= 3 && uchar(buf[0]) == 0xef && uchar(buf[1]) == 0xbb && uchar(buf[2])== 0xbf) | |
| { | |
| detected_codec = QTextCodec::codecForName("UTF-8"); | |
| if (detected_codec) new_encoding=detected_codec->name(); | |
| } | |
| else | |
| { | |
| const char * data= buf.constData(); | |
| int length=buf.size(); | |
| bool canbeutf8=true; | |
| static const unsigned char highest1Bits = 0x80; | |
| static const unsigned char highest2Bits = 0xC0; | |
| static const unsigned char highest3Bits = 0xE0; | |
| static const unsigned char highest4Bits = 0xF0; | |
| static const unsigned char highest5Bits = 0xF8; | |
| int multiByte=0; | |
| for (int i=0; i<length; ++i) | |
| { | |
| unsigned char c = data[i]; | |
| if (multiByte>0) | |
| { | |
| if ((c & highest2Bits) == 0x80) | |
| { | |
| --(multiByte); | |
| continue; | |
| } | |
| canbeutf8=false; | |
| break; | |
| } | |
| // most significant bit zero, single char | |
| if ((c & highest1Bits) == 0x00) | |
| continue; | |
| // 110xxxxx => init 1 following bytes | |
| if ((c & highest3Bits) == 0xC0) | |
| { | |
| multiByte = 1; | |
| continue; | |
| } | |
| // 1110xxxx => init 2 following bytes | |
| if ((c & highest4Bits) == 0xE0) | |
| { | |
| multiByte = 2; | |
| continue; | |
| } | |
| // 11110xxx => init 3 following bytes | |
| if ((c & highest5Bits) == 0xF0) | |
| { | |
| multiByte = 3; | |
| continue; | |
| } | |
| canbeutf8=false; | |
| break; | |
| } | |
| if (canbeutf8) | |
| { | |
| detected_codec = QTextCodec::codecForName("UTF-8"); | |
| if (detected_codec) new_encoding=detected_codec->name(); | |
| } | |
| } | |
| if (new_encoding!="") | |
| { | |
| if (new_encoding!=codec->name()) hasDecodingError=true; | |
| } | |
| else | |
| { | |
| // no unicode | |
| int minSize = qMin(verifyBuf.size(), buf.size()); | |
| hasDecodingError = (minSize < buf.size()- 4 || memcmp(verifyBuf.constData() + verifyBuf.size() - minSize,buf.constData() + buf.size() - minSize, minSize)); | |
| QEncodingProber prober (QEncodingProber::Universal); | |
| if (hasDecodingError) | |
| { | |
| prober.feed (buf.constData()); | |
| if (prober.confidence() > 0.6) //Kencodingprober works very bad with tex documents | |
| { | |
| detected_codec = QTextCodec::codecForName(prober.encoding()); | |
| if (detected_codec) new_encoding=detected_codec->name(); | |
| else if (input_encoding=="UTF-8") new_encoding="ISO-8859-1"; | |
| else if (input_encoding=="ISO-8859-1") new_encoding="UTF-8"; | |
| else new_encoding=QString(QTextCodec::codecForLocale()->name()); | |
| } | |
| else if (input_encoding=="UTF-8") new_encoding="ISO-8859-1"; | |
| else if (input_encoding=="ISO-8859-1") new_encoding="UTF-8"; | |
| else new_encoding=QString(QTextCodec::codecForLocale()->name()); | |
| } | |
| } | |
| if (hasDecodingError) | |
| { | |
| EncodingDialog *encDlg = new EncodingDialog(this); | |
| encDlg->ui.comboBoxEncoding->setCurrentIndex(encDlg->ui.comboBoxEncoding->findText(new_encoding, Qt::MatchExactly)); | |
| encDlg->ui.label->setText(encDlg->ui.label->text()+ " ("+input_encoding+")."); | |
| if (encDlg->exec()) | |
| { | |
| new_encoding=encDlg->ui.comboBoxEncoding->currentText(); | |
| codec = QTextCodec::codecForName(new_encoding.toLatin1()); | |
| text = codec->toUnicode(buf); | |
| } | |
| else return; | |
| } | |
| LatexEditorView *edit = new LatexEditorView(0,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),f,userTagsList); | |
| EditorView->addWidget( edit); | |
| ComboFilesInsert(f); | |
| disconnect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateStructure()) ); | |
| EditorView->setCurrentIndex(EditorView->indexOf(edit)); | |
| connect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateStructure()) ); | |
| edit->editor->setReadOnly(false); | |
| if (hasDecodingError) edit->editor->setEncoding(new_encoding); | |
| else edit->editor->setEncoding(input_encoding); | |
| initCompleter(); | |
| if (completion) edit->editor->setCompleter(completer); | |
| else edit->editor->setCompleter(0); | |
| edit->editor->setPlainText(text); | |
| filenames.remove( edit); | |
| filenames.insert( edit, f ); | |
| edit->editor->document()->setModified(false); | |
| connect(edit->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| connect(edit->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| connect(edit->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| connect(edit->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| connect(edit->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| currentEditorView()->editor->setLastNumLines(currentEditorView()->editor->numoflines()); | |
| connect(edit->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| connect(edit->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| connect(edit->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| if (wordwrap) {edit->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {edit->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| UpdateCaption(); | |
| NewDocumentStatus(false); | |
| AddRecentFile(f); | |
| ShowStructure(); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| QString rootName,rootFilePath; | |
| QTextCursor curs(edit->editor->document()); | |
| curs.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor,1024); | |
| QString peekStr = curs.selectedText(); | |
| QRegExp re("% *!TEX +root *= *([^\\x2029]+)\\x2029", Qt::CaseInsensitive); | |
| int pos = re.indexIn(peekStr); | |
| if (pos > -1) | |
| { | |
| rootName = re.cap(1).trimmed(); | |
| QFileInfo rootFileInfo(fi.canonicalPath() + "/" + rootName); | |
| if (rootFileInfo.exists()) rootFilePath = rootFileInfo.canonicalFilePath(); | |
| else rootFilePath = rootFileInfo.filePath(); | |
| setMasterDocument(rootFilePath); | |
| } | |
| #if !defined(Q_OS_MAC) | |
| show(); | |
| if (windowState()==Qt::WindowMinimized) setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); | |
| qApp->setActiveWindow(this); | |
| activateWindow(); | |
| setFocus(); | |
| //raise(); | |
| //#ifdef Q_WS_WIN | |
| // if (IsIconic (this->winId())) ShowWindow(this->winId(), SW_RESTORE); | |
| //#endif | |
| #endif | |
| if (winmaximized) setWindowState(windowState() & Qt::WindowMaximized | Qt::WindowActive); | |
| edit->editor->setFocus(); | |
| } | |
| void Texmaker::setLine( const QString &line ) | |
| { | |
| bool ok; | |
| int l=line.toInt(&ok,10); | |
| if (currentEditorView() && ok) | |
| { | |
| QTextCursor cur=currentEditorView()->editor->textCursor(); | |
| cur.movePosition(QTextCursor::End); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->gotoLine(l-1); | |
| currentEditorView()->editor->setFocus(); | |
| } | |
| } | |
| void Texmaker::insertFromCommandLine(const QString &entity) | |
| { | |
| if (currentEditorView()) | |
| { | |
| currentEditorView()->editor->insertPlainText(entity); | |
| #if !defined(Q_OS_MAC) | |
| show(); | |
| if (windowState()==Qt::WindowMinimized) setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); | |
| qApp->setActiveWindow(this); | |
| activateWindow(); | |
| setFocus(); | |
| #endif | |
| if (winmaximized) setWindowState(windowState() & Qt::WindowMaximized | Qt::WindowActive); | |
| currentEditorView()->editor->setFocus(); | |
| } | |
| } | |
| void Texmaker::fileNew() | |
| { | |
| LatexEditorView *edit = new LatexEditorView(0,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),"untitled"+QString::number(untitled_id),userTagsList); | |
| edit->editor->setReadOnly(false); | |
| edit->editor->setEncoding(input_encoding); | |
| initCompleter(); | |
| if (completion) edit->editor->setCompleter(completer); | |
| else edit->editor->setCompleter(0); | |
| EditorView->addWidget( edit); | |
| EditorView->setCurrentIndex(EditorView->indexOf(edit)); | |
| if (wordwrap) {edit->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {edit->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| filenames.remove( edit); | |
| filenames.insert( edit, "untitled"+QString::number(untitled_id) ); | |
| ComboFilesInsert("untitled"+QString::number(untitled_id)); | |
| untitled_id++; | |
| edit->editor->document()->setModified(false); | |
| connect(edit->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| connect(edit->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| connect(edit->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| connect(edit->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| connect(edit->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| currentEditorView()->editor->setLastNumLines(currentEditorView()->editor->numoflines()); | |
| connect(edit->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| connect(edit->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| connect(edit->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| UpdateCaption(); | |
| NewDocumentStatus(false); | |
| edit->editor->setFocus(); | |
| } | |
| void Texmaker::fileNewFromFile() | |
| { | |
| QString currentDir=QDir::homePath(); | |
| if (!lastTemplate.isEmpty()) | |
| { | |
| QFileInfo fi(lastTemplate); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getOpenFileName(this,tr("Open File"),currentDir,"TeX files (*.tex *.bib *.sty *.cls *.mp *.Rnw *.asy);;All files (*.*)"); | |
| if (fn.isEmpty()) return; | |
| QFile file( fn ); | |
| if ( !file.open( QIODevice::ReadOnly ) ) | |
| { | |
| QMessageBox::warning( this,tr("Error"), tr("You do not have read permission to this file.")); | |
| return; | |
| } | |
| lastTemplate=fn; | |
| LatexEditorView *edit = new LatexEditorView(0,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),fn,userTagsList); | |
| edit->editor->setReadOnly(false); | |
| edit->editor->setEncoding(input_encoding); | |
| initCompleter(); | |
| if (completion) edit->editor->setCompleter(completer); | |
| else edit->editor->setCompleter(0); | |
| EditorView->addWidget( edit); | |
| EditorView->setCurrentIndex(EditorView->indexOf(edit)); | |
| if (wordwrap) {edit->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {edit->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| filenames.remove( edit); | |
| filenames.insert( edit, "untitled"+QString::number(untitled_id)); | |
| ComboFilesInsert("untitled"+QString::number(untitled_id)); | |
| untitled_id++; | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(input_encoding.toLatin1()); | |
| if(!codec) codec = QTextCodec::codecForLocale(); | |
| ts.setCodec(codec); | |
| edit->editor->setPlainText( ts.readAll() ); | |
| file.close(); | |
| edit->editor->document()->setModified(true); | |
| connect(edit->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| connect(edit->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| connect(edit->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| currentEditorView()->editor->setLastNumLines(currentEditorView()->editor->numoflines()); | |
| connect(edit->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| connect(edit->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| connect(edit->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| connect(edit->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| connect(edit->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| connect(edit->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| UpdateCaption(); | |
| NewDocumentStatus(true); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| edit->editor->setFocus(); | |
| } | |
| void Texmaker::fileOpen() | |
| { | |
| QString currentDir=QDir::homePath(); | |
| if (!lastDocument.isEmpty()) | |
| { | |
| QFileInfo fi(lastDocument); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QStringList filesNames = QFileDialog::getOpenFileNames(this,tr("Open File"),currentDir,"TeX files (*.tex *.bib *.sty *.cls *.mp *.Rnw *.asy);;All files (*.*)"); | |
| foreach (const QString& fn, filesNames) | |
| { | |
| if ( !fn.isEmpty() ) load( fn ); | |
| } | |
| if ((filesNames.count()==1) && embedinternalpdf && builtinpdfview && showpdfview) | |
| { | |
| if ( !currentEditorView() || !singlemode ) return; | |
| QString finame=getName(); | |
| QFileInfo fi(finame); | |
| QString basename=fi.completeBaseName(); | |
| QString pdfname=outputName(finame,".pdf"); | |
| QFileInfo pdfi(pdfname); | |
| if (pdfi.exists() && pdfi.isReadable()) | |
| { | |
| if (pdfviewerWidget) | |
| { | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| } | |
| else | |
| { | |
| // pdfviewerWidget=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWidget=new PdfViewerWidget(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,StackedViewers); | |
| pdfviewerWidget->centralToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| pdfviewerWidget->centralToolBarBis->setMaximumHeight(centralToolBarBis->height()); | |
| connect(pdfviewerWidget, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWidget, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWidget, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| StackedViewers->addWidget(pdfviewerWidget); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| } | |
| } | |
| } | |
| if (currentEditorView()) currentEditorView()->editor->setFocus(); | |
| } | |
| bool Texmaker::isCurrentModifiedOutside() | |
| { | |
| if ( !currentEditorView() ) return false; | |
| QString fn=*filenames.find( currentEditorView() ); | |
| QFileInfo fi(fn); | |
| fi.refresh(); | |
| QDateTime disktime=fi.lastModified(); | |
| int delta=disktime.secsTo(currentEditorView()->editor->getLastSavedTime()); | |
| if (watchfiles && (delta<-3)) return true; | |
| else return false; | |
| } | |
| void Texmaker::checkModifiedOutsideAll() | |
| { | |
| if (QApplication::activeWindow() != this) return; | |
| QList<QTreeWidgetItem *> fItems; | |
| bool islabels_expanded=false; | |
| bool isblocks_expanded=true; | |
| fItems=StructureTreeWidget->findItems ("LABELS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| islabels_expanded=fItems.at(0)->isExpanded(); | |
| } | |
| } | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("BLOCKS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| isblocks_expanded=fItems.at(0)->isExpanded(); | |
| } | |
| } | |
| LatexEditorView *temp = new LatexEditorView(EditorView,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),getName(),userTagsList); | |
| temp=currentEditorView(); | |
| FilesMap::Iterator it; | |
| QString fn; | |
| int choice; | |
| disconnect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateStructure()) ); //******* | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| if ( !getName().startsWith("untitled")) | |
| { | |
| fn=*filenames.find( currentEditorView() ); | |
| if (isCurrentModifiedOutside()) | |
| { | |
| QFileInfo fi(fn); | |
| choice= QMessageBox::warning(this, "Texmaker", | |
| tr("The document has been changed outside Texmaker." | |
| "Do you want to reload it (and discard your changes) or save it (and overwrite the file)?"), | |
| tr("Reload the file"), tr("Save"), tr("Cancel"), | |
| 0, | |
| 2 ); | |
| if (choice==0) | |
| { | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| QFile file( fn ); | |
| if (file.open( QIODevice::ReadOnly ) ) | |
| { | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| disconnect(currentEditorView()->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| disconnect(currentEditorView()->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| currentEditorView()->editor->setPlainText( ts.readAll() ); | |
| file.close(); | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| connect(currentEditorView()->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| connect(currentEditorView()->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| connect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| connect(currentEditorView()->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| connect(currentEditorView()->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| currentEditorView()->editor->setLastNumLines(currentEditorView()->editor->numoflines()); | |
| connect(currentEditorView()->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| connect(currentEditorView()->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| connect(currentEditorView()->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| QApplication::restoreOverrideCursor(); | |
| } | |
| } | |
| } | |
| else if (choice==1) | |
| { | |
| QFile file(fn); | |
| if (file.open( QIODevice::WriteOnly ) ) | |
| { | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| ts << currentEditorView()->editor->toPlainText(); | |
| file.close(); | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| currentEditorView()->editor->document()->setModified(false); | |
| } | |
| } | |
| else currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| } | |
| } | |
| } | |
| EditorView->setCurrentIndex(EditorView->indexOf(temp)); | |
| connect(EditorView, SIGNAL( currentChanged( int ) ), this, SLOT(UpdateStructure()) ); //******** | |
| QString title; | |
| if ( !currentEditorView() ) {title="Texmaker";} | |
| else | |
| { | |
| title="Document : "+getName(); | |
| //input_encoding=currentEditorView()->editor->getEncoding(); | |
| } | |
| setWindowTitle(title); | |
| UpdateStructure(); | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("LABELS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| StructureTreeWidget->setItemExpanded(fItems.at(0),islabels_expanded); | |
| } | |
| } | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("BLOCKS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| StructureTreeWidget->setItemExpanded (fItems.at(0),isblocks_expanded); | |
| } | |
| } | |
| QString finame=getName(); | |
| int check=comboFiles->findData(finame,Qt::UserRole,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| comboFiles->setCurrentIndex(check); | |
| if ((check>-1) && (check<OpenedFilesListWidget->count())) OpenedFilesListWidget->setCurrentRow(check); | |
| if (!finame.startsWith("untitled") && finame!="") | |
| { | |
| lastDocument=finame; | |
| } | |
| if (currentEditorView()) | |
| { | |
| SaveAct->setEnabled(currentEditorView()->editor->document()->isModified()); | |
| UndoAct->setEnabled(currentEditorView()->editor->document()->isUndoAvailable()); | |
| RedoAct->setEnabled(currentEditorView()->editor->document()->isRedoAvailable()); | |
| CopyAct->setEnabled(currentEditorView()->editor->textCursor().hasSelection()); | |
| CutAct->setEnabled(currentEditorView()->editor->textCursor().hasSelection()); | |
| stat3->setText(QString(" %1 ").arg(currentEditorView()->editor->getEncoding())); | |
| } | |
| else | |
| { | |
| SaveAct->setEnabled(false); | |
| UndoAct->setEnabled(false); | |
| RedoAct->setEnabled(false); | |
| CopyAct->setEnabled(false); | |
| CutAct->setEnabled(false); | |
| } | |
| if (currentEditorView()) currentEditorView()->editor->setFocus(); | |
| } | |
| void Texmaker::fileSave() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString fn; | |
| if ( getName().startsWith("untitled") ) {fileSaveAs();} | |
| else | |
| { | |
| fn=*filenames.find( currentEditorView() ); | |
| if (isCurrentModifiedOutside()) | |
| { | |
| QFileInfo fi(fn); | |
| switch( QMessageBox::warning(this, "Texmaker", | |
| tr("The document has been changed outside Texmaker." | |
| "Do you want to reload it (and discard your changes) or save it (and overwrite the file)?"), | |
| tr("Reload the file"), tr("Save"), tr("Cancel"), | |
| 0, | |
| 2 ) ) | |
| { | |
| case 0: | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| load(fn); | |
| return; | |
| } | |
| break; | |
| case 1: | |
| break; | |
| case 2: | |
| default: | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| return; | |
| break; | |
| } | |
| } | |
| QFile file(fn); | |
| if ( !file.open( QIODevice::WriteOnly ) ) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("The file could not be saved. Please check if you have write permission.")); | |
| return; | |
| } | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| ts << currentEditorView()->editor->toPlainText(); | |
| file.close(); | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| currentEditorView()->editor->document()->setModified(false); | |
| fn=getName(); | |
| AddRecentFile(fn); | |
| } | |
| UpdateCaption(); | |
| } | |
| bool Texmaker::currentfileSaved() | |
| { | |
| if ( !currentEditorView() ) return true; | |
| QString fn; | |
| if ( getName().startsWith("untitled") ) {return false;} | |
| else | |
| { | |
| fn=*filenames.find( currentEditorView() ); | |
| if (isCurrentModifiedOutside()) | |
| { | |
| QFileInfo fi(fn); | |
| switch( QMessageBox::warning(this, "Texmaker", | |
| tr("The document has been changed outside Texmaker." | |
| "Do you want to reload it (and discard your changes) or save it (and overwrite the file)?"), | |
| tr("Reload the file"), tr("Save"), tr("Cancel"), | |
| 0, | |
| 2 ) ) | |
| { | |
| case 0: | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| load(fn); | |
| return true; | |
| } | |
| break; | |
| case 1: | |
| break; | |
| case 2: | |
| default: | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| return false; | |
| break; | |
| } | |
| } | |
| QFile file(fn); | |
| if ( !file.open( QIODevice::WriteOnly ) ) | |
| { | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("The file could not be saved. Please check if you have write permission.")); | |
| return false; | |
| } | |
| else return true; | |
| } | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| ts << currentEditorView()->editor->toPlainText(); | |
| file.close(); | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| currentEditorView()->editor->document()->setModified(false); | |
| fn=getName(); | |
| AddRecentFile(fn); | |
| UpdateCaption(); | |
| return true; | |
| } | |
| } | |
| void Texmaker::fileSaveAs() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| if (!lastDocument.isEmpty()) | |
| { | |
| QFileInfo fi(lastDocument); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getSaveFileName(this,tr("Save As"),currentDir,"TeX files (*.tex *.bib *.sty *.cls *.mp *.Rnw *.asy);;All files (*.*)"); | |
| if ( !fn.isEmpty() ) | |
| { | |
| if (!fn.contains('.')) fn += ".tex"; | |
| QFileInfo fic(fn); | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| filenames.insert(currentEditorView(), fn ); | |
| fileSave(); | |
| currentEditorView()->editor->updateName(fn); | |
| //EditorView->setTabText(EditorView->indexOf(currentEditorView()),fic.fileName()); | |
| ComboFilesInsert(fn); | |
| } | |
| UpdateCaption(); | |
| } | |
| void Texmaker::fileSaveAll() | |
| { | |
| LatexEditorView *temp = new LatexEditorView(EditorView,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),getName(),userTagsList); | |
| temp=currentEditorView(); | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| fileSave(); | |
| } | |
| EditorView->setCurrentIndex(EditorView->indexOf(temp)); | |
| UpdateCaption(); | |
| } | |
| void Texmaker::fileBackupAll() | |
| { | |
| if (!currentEditorView() ) return; | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| LatexEditorView *temp = new LatexEditorView(EditorView,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),getName(),userTagsList); | |
| temp=currentEditorView(); | |
| QString fn; | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| if (currentEditorView() && !getName().startsWith("untitled")) | |
| { | |
| fn=*filenames.find( currentEditorView() )+".bak"; | |
| QFile file(fn); | |
| if ( !file.open( QIODevice::WriteOnly ) ) continue; | |
| else | |
| { | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| ts << currentEditorView()->editor->toPlainText(); | |
| file.close(); | |
| } | |
| } | |
| } | |
| EditorView->setCurrentIndex(EditorView->indexOf(temp)); | |
| UpdateCaption(); | |
| QApplication::restoreOverrideCursor(); | |
| } | |
| void Texmaker::fileSaveACopy() | |
| { | |
| if (!currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| if (!lastDocument.isEmpty()) | |
| { | |
| QFileInfo fi(lastDocument); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getSaveFileName(this,tr("Save As"),currentDir,"TeX files (*.tex *.bib *.sty *.cls *.mp *.Rnw *.asy);;All files (*.*)"); | |
| if ( !fn.isEmpty() ) | |
| { | |
| if (!fn.contains('.')) fn += ".tex"; | |
| QFile file(fn); | |
| if ( file.open( QIODevice::WriteOnly ) ) | |
| { | |
| QTextStream ts( &file ); | |
| QTextCodec* codec = QTextCodec::codecForName(currentEditorView()->editor->getEncoding().toLatin1()); | |
| ts.setCodec(codec ? codec : QTextCodec::codecForLocale()); | |
| ts << currentEditorView()->editor->toPlainText(); | |
| file.close(); | |
| } | |
| } | |
| } | |
| void Texmaker::fileClose() | |
| { | |
| if ( !currentEditorView() ) return; | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| int query; | |
| QString locale = TexmakerApp::instance()->language.left(2); | |
| if (locale=="en") | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| "The document contains unsaved work. " | |
| "Do you want to save it before closing?", | |
| "Save and Close", "Close without saving", "Cancel", | |
| 0, | |
| 2 ); | |
| } | |
| else | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| tr("The document contains unsaved work. " | |
| "Do you want to save it before closing?"), | |
| tr("Save and Close"), tr("Don't Save and Close"), tr("Cancel"), | |
| 0, | |
| 2 ); | |
| } | |
| switch( query ) | |
| { | |
| case 0: | |
| fileSave(); | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 1: | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 2: | |
| default: | |
| return; | |
| break; | |
| } | |
| } | |
| else | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| } | |
| UpdateCaption(); | |
| } | |
| void Texmaker::fileCloseRequested( int index) | |
| { | |
| EditorView->setCurrentIndex(index); | |
| fileClose(); | |
| } | |
| void Texmaker::fileCloseAll() | |
| { | |
| bool go=true; | |
| int query; | |
| QString locale = TexmakerApp::instance()->language.left(2); | |
| while (currentEditorView() && go) | |
| { | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| if (locale=="en") | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| "The document contains unsaved work. " | |
| "Do you want to save it before closing?", | |
| "Save and Close", "Close without saving", "Cancel", | |
| 0, | |
| 2 ); | |
| } | |
| else | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| tr("The document contains unsaved work. " | |
| "Do you want to save it before closing?"), | |
| tr("Save and Close"), tr("Don't Save and Close"), tr("Cancel"), | |
| 0, | |
| 2 ); | |
| } | |
| switch(query) | |
| { | |
| case 0: | |
| fileSave(); | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 1: | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 2: | |
| default: | |
| go=false; | |
| return; | |
| break; | |
| } | |
| } | |
| else | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| } | |
| } | |
| UpdateCaption(); | |
| } | |
| void Texmaker::fileExit() | |
| { | |
| SaveSettings(); | |
| if (browserWindow) browserWindow->close(); | |
| if (pdfviewerWidget) {StackedViewers->removeWidget(pdfviewerWidget);delete(pdfviewerWidget);} | |
| if (pdfviewerWindow) pdfviewerWindow->close(); | |
| bool accept=true; | |
| int query; | |
| QString locale = TexmakerApp::instance()->language.left(2); | |
| while (currentEditorView() && accept) | |
| { | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| if (locale=="en") | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| "The document contains unsaved work. " | |
| "Do you want to save it before closing?", | |
| "Save and Close", "Close without saving", "Cancel", | |
| 0, | |
| 2 ); | |
| } | |
| else | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| tr("The document contains unsaved work. " | |
| "Do you want to save it before closing?"), | |
| tr("Save and Close"), tr("Don't Save and Close"), tr("Cancel"), | |
| 0, | |
| 2 ); | |
| } | |
| switch(query) | |
| { | |
| case 0: | |
| fileSave(); | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 1: | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 2: | |
| default: | |
| accept=false; | |
| break; | |
| } | |
| } | |
| else | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| } | |
| } | |
| if (accept) | |
| { | |
| if (eraseSettings && QFile::exists(settingsFileName)) | |
| { | |
| QFile file(settingsFileName); | |
| file.open( QIODevice::ReadOnly ); | |
| file.remove(); | |
| } | |
| if (replaceSettings) | |
| { | |
| QString from_file = QFileDialog::getOpenFileName(this,tr("Select a File"),QDir::homePath(),"Setting files (*.ini);;All files (*.*)"); | |
| if (!from_file.isEmpty() && QFile::exists(from_file)) | |
| { | |
| if (!settingsFileName.isEmpty() && QFile::exists(settingsFileName)) | |
| { | |
| QFile file(settingsFileName); | |
| file.open( QIODevice::ReadOnly ); | |
| file.remove(); | |
| QFile fichier_or(from_file); | |
| fichier_or.copy(settingsFileName); | |
| } | |
| } | |
| else | |
| { | |
| replaceSettings=false; | |
| return; | |
| } | |
| } | |
| qApp->quit(); | |
| } | |
| else | |
| { | |
| eraseSettings=false; | |
| replaceSettings=false; | |
| } | |
| } | |
| void Texmaker::closeEvent(QCloseEvent *e) | |
| { | |
| SaveSettings(); | |
| if (browserWindow) browserWindow->close(); | |
| if (pdfviewerWidget) {StackedViewers->removeWidget(pdfviewerWidget);delete(pdfviewerWidget);} | |
| if (pdfviewerWindow) pdfviewerWindow->close(); | |
| bool accept=true; | |
| int query; | |
| QString locale = TexmakerApp::instance()->language.left(2); | |
| while (currentEditorView() && accept) | |
| { | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| if (locale=="en") | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| "The document contains unsaved work. " | |
| "Do you want to save it before closing?", | |
| "Save and Close", "Close without saving", "Cancel", | |
| 0, | |
| 2 ); | |
| } | |
| else | |
| { | |
| query=QMessageBox::warning(this, "Texmaker", | |
| tr("The document contains unsaved work. " | |
| "Do you want to save it before closing?"), | |
| tr("Save and Close"), tr("Don't Save and Close"), tr("Cancel"), | |
| 0, | |
| 2 ); | |
| } | |
| switch(query) | |
| { | |
| case 0: | |
| fileSave(); | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 1: | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| break; | |
| case 2: | |
| default: | |
| accept=false; | |
| break; | |
| } | |
| } | |
| else | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| } | |
| } | |
| if (accept) e->accept(); | |
| else e->ignore(); | |
| } | |
| void Texmaker::fileOpenRecent() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if (action) | |
| { | |
| load(action->data().toString()); | |
| if (embedinternalpdf && builtinpdfview && showpdfview) | |
| { | |
| if ( !currentEditorView() || !singlemode ) return; | |
| QString finame=getName(); | |
| QFileInfo fi(finame); | |
| QString basename=fi.completeBaseName(); | |
| QString pdfname=outputName(finame,".pdf"); | |
| QFileInfo pdfi(pdfname); | |
| if (pdfi.exists() && pdfi.isReadable()) | |
| { | |
| if (pdfviewerWidget) | |
| { | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| } | |
| else | |
| { | |
| // pdfviewerWidget=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWidget=new PdfViewerWidget(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,StackedViewers); | |
| pdfviewerWidget->centralToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| pdfviewerWidget->centralToolBarBis->setMaximumHeight(centralToolBarBis->height()); | |
| connect(pdfviewerWidget, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWidget, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWidget, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| StackedViewers->addWidget(pdfviewerWidget); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| } | |
| } | |
| } | |
| } | |
| if (currentEditorView()) currentEditorView()->editor->setFocus(); | |
| } | |
| void Texmaker::AddRecentFile(const QString &f) | |
| { | |
| QString nativeFileName = QDir::toNativeSeparators(f); | |
| if (recentFilesList.contains(nativeFileName)) | |
| { | |
| recentFilesList.move(recentFilesList.indexOf(nativeFileName), 0); | |
| UpdateRecentFile(); | |
| return; | |
| } | |
| if (recentFilesList.count() < 10) recentFilesList.prepend(nativeFileName); | |
| else | |
| { | |
| recentFilesList.removeLast(); | |
| recentFilesList.prepend(nativeFileName); | |
| } | |
| UpdateRecentFile(); | |
| } | |
| void Texmaker::UpdateRecentFile() | |
| { | |
| for (int i=0; i < recentFilesList.count(); i++) | |
| { | |
| recentFileActs[i]->setText(recentFilesList.at(i)); | |
| recentFileActs[i]->setData(recentFilesList.at(i)); | |
| recentFileActs[i]->setVisible(true); | |
| } | |
| for (int j = recentFilesList.count(); j < 10; ++j) recentFileActs[j]->setVisible(false); | |
| } | |
| void Texmaker::CleanRecent() | |
| { | |
| recentFilesList.clear(); | |
| UpdateRecentFile(); | |
| } | |
| void Texmaker::filePrint() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QTextDocument *document = currentEditorView()->editor->document(); | |
| QPrinter printer; | |
| QPrintDialog *dlg = new QPrintDialog(&printer, this); | |
| if (dlg->exec() != QDialog::Accepted) return; | |
| document->print(&printer); | |
| } | |
| void Texmaker::fileOpenAndGoto(const QString &f, int line,bool focus) | |
| { | |
| load(f); | |
| if (currentEditorView()) | |
| { | |
| QTextCursor cur=currentEditorView()->editor->textCursor(); | |
| cur.movePosition(QTextCursor::End); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->gotoLine(line-1); | |
| //currentEditorView()->editor->ensureCursorVisible(); | |
| //currentEditorView()->editor->setHightLightLine(); | |
| } | |
| setLine(QString::number(line)); | |
| if (focus) getFocusToEditor(); | |
| } | |
| void Texmaker::getFocusToEditor() | |
| { | |
| #if !defined(Q_OS_MAC) | |
| show(); | |
| if (windowState()==Qt::WindowMinimized) setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); | |
| #endif | |
| show(); | |
| if (windowState()==Qt::WindowMinimized) setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); | |
| qApp->setActiveWindow(this); | |
| activateWindow(); | |
| setFocus(); | |
| if (currentEditorView()) currentEditorView()->editor->setFocus(); | |
| } | |
| void Texmaker::fileReload() | |
| { | |
| if ( !currentEditorView() ) return; | |
| if ( getName().startsWith("untitled") ) return; | |
| QString f=filenames[currentEditorView()]; | |
| if (currentEditorView()->editor->document()->isModified()) | |
| { | |
| switch( QMessageBox::warning(this, "Texmaker", | |
| tr("The document contains unsaved work." | |
| "You will lose changes by reloading the document."), | |
| tr("Reload the file"), tr("Cancel"), | |
| 0, | |
| 1 ) ) | |
| { | |
| case 0: | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| load(f); | |
| break; | |
| case 1: | |
| default: | |
| return; | |
| break; | |
| } | |
| } | |
| else | |
| { | |
| filenames.remove(currentEditorView()); | |
| comboFiles->removeItem(comboFiles->currentIndex()); | |
| delete OpenedFilesListWidget->currentItem(); | |
| delete currentEditorView(); | |
| load(f); | |
| } | |
| } | |
| void Texmaker::listSelectionActivated(int index) | |
| { | |
| disconnect(OpenedFilesListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(OpenedFileActivated(QListWidgetItem*))); | |
| if ((index>-1) && (index<OpenedFilesListWidget->count())) OpenedFilesListWidget->setCurrentRow(index); | |
| connect(OpenedFilesListWidget, SIGNAL(itemClicked ( QListWidgetItem*)), this, SLOT(OpenedFileActivated(QListWidgetItem*))); | |
| QString f=comboFiles->itemData(index, Qt::UserRole).toString(); | |
| FilesMap::Iterator it; | |
| QString fw32,funix,forig; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| forig=filenames[it.key()]; | |
| fw32=filenames[it.key()]; | |
| funix=filenames[it.key()]; | |
| fw32.replace(QString("\\"),QString("/")); | |
| funix.replace(QString("/"),QString("\\")); | |
| if ( (forig==f) || (fw32==f) || (funix==f)) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| } | |
| } | |
| } | |
| void Texmaker::ToggleMasterCurrent() | |
| { | |
| QString dest; | |
| FilesMap::Iterator it; | |
| QString fw32,funix,forig; | |
| if (singlemode) | |
| { | |
| lastChild=""; | |
| return; | |
| } | |
| if (getName()==MasterName) | |
| { | |
| dest=lastChild; | |
| } | |
| else | |
| { | |
| lastChild=getName(); | |
| dest=MasterName; | |
| } | |
| if (!dest.isEmpty()) | |
| { | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| forig=filenames[it.key()]; | |
| fw32=filenames[it.key()]; | |
| funix=filenames[it.key()]; | |
| fw32.replace(QString("\\"),QString("/")); | |
| funix.replace(QString("/"),QString("\\")); | |
| if ( (forig==dest) || (fw32==dest) || (funix==dest)) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| } | |
| } | |
| } | |
| } | |
| //////////////////////////// EDIT /////////////////////// | |
| void Texmaker::editUndo() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->undoText(); | |
| } | |
| void Texmaker::editRedo() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->redoText(); | |
| } | |
| void Texmaker::editCut() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->cut(); | |
| } | |
| void Texmaker::editCopy() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->copy(); | |
| } | |
| void Texmaker::editPaste() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->paste(); | |
| } | |
| void Texmaker::editSelectAll() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->selectAll(); | |
| } | |
| void Texmaker::editFindInDirectory() | |
| { | |
| if (!scanDialog) | |
| { | |
| scanDialog = new ScanDialog(this); | |
| connect(scanDialog, SIGNAL(openFileAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| } | |
| scanDialog->show(); | |
| scanDialog->raise(); | |
| } | |
| void Texmaker::editFind() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->showFind(); | |
| } | |
| void Texmaker::editFindNext() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->showFindNext(); | |
| } | |
| void Texmaker::editReplace() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->showReplace(); | |
| } | |
| void Texmaker::editGotoLine() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->showGoto(); | |
| } | |
| void Texmaker::editComment() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->commentSelection(); | |
| } | |
| void Texmaker::editUncomment() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->uncommentSelection(); | |
| } | |
| void Texmaker::editIndent() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->indentSelection(); | |
| } | |
| void Texmaker::editUnindent() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->unindentSelection(); | |
| } | |
| void Texmaker::editSpell() | |
| { | |
| if ( !currentEditorView() ) return; | |
| if (spelldicExist()) | |
| { | |
| SpellerDialog *spellDlg=new SpellerDialog(this,currentEditorView()->editor,spell_ignored_words); | |
| if (spellDlg->exec()) | |
| { | |
| spell_ignored_words=spellDlg->alwaysignoredwordList.join(","); | |
| currentEditorView()->editor->highlighter->SetAlwaysIgnoredWords(spell_ignored_words); | |
| currentEditorView()->editor->highlighter->rehighlight(); | |
| } | |
| } | |
| else | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Error : Can't open the dictionary")); | |
| return; | |
| } | |
| } | |
| void Texmaker::editTipTab() | |
| { | |
| if ( !currentEditorView() ) return; | |
| OutputTextEdit->clear(); | |
| OutputTextEdit->insertLine("Use the Tab key to reach the next "+QString(0x2022)+" field"); | |
| } | |
| void Texmaker::editRunScript() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| if (!lastScript.isEmpty()) | |
| { | |
| QFileInfo fi(lastScript); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getOpenFileName(this,tr("Browse script"),currentDir,"Script (*.tms)"); | |
| if (fn.isEmpty()) return; | |
| lastScript=fn; | |
| currentEditorView()->editor->ExecuteScript(fn); | |
| } | |
| /////////////// CONFIG //////////////////// | |
| void Texmaker::ReadSettings() | |
| { | |
| #ifdef USB_VERSION | |
| QSettings *config=new QSettings(QCoreApplication::applicationDirPath()+"/texmaker.ini",QSettings::IniFormat); //for USB-stick version : | |
| #else | |
| QSettings *config=new QSettings(QSettings::IniFormat,QSettings::UserScope,"xm1","texmaker"); | |
| #endif | |
| settingsFileName=config->fileName(); | |
| if (!config->contains("IniMode")) | |
| { | |
| delete config; | |
| config=new QSettings("xm1","texmaker"); | |
| } | |
| config->beginGroup( "texmaker" ); | |
| singlemode=true; | |
| QFontDatabase fdb; | |
| QStringList xf = fdb.families(); | |
| QString deft; | |
| bool new_user=(!config->contains("GUI/New Version")); | |
| modern_style=config->value( "GUI/Style",true).toBool(); | |
| new_gui=config->value( "GUI/New Version",false).toBool(); | |
| QRect screen = QApplication::desktop()->screenGeometry(); | |
| int w= config->value( "Geometries/MainwindowWidth",screen.width()-150).toInt(); | |
| int h= config->value( "Geometries/MainwindowHeight",screen.height()-100).toInt() ; | |
| int x= config->value( "Geometries/MainwindowX",30).toInt(); | |
| int y= config->value( "Geometries/MainwindowY",30).toInt() ; | |
| resize(w,h); | |
| move(x,y); | |
| windowstate=config->value("MainWindowState").toByteArray(); | |
| winmaximized=config->value("MainWindowMaximized",false).toBool(); | |
| splitter1state=config->value("Splitter1State").toByteArray(); | |
| splitter2state=config->value("Splitter2State").toByteArray(); | |
| splitter3state=config->value("Splitter3State").toByteArray(); | |
| psize=config->value( "Print/PaperSize","a4").toString(); | |
| lastScale=config->value( "PdfView/Scale",10).toFloat()/100.0; | |
| #if defined(Q_OS_WIN32) | |
| if (xf.contains("Courier New",Qt::CaseInsensitive)) deft="Courier New"; | |
| else deft=qApp->font().family(); | |
| QString fam=config->value("Editor/Font Family",deft).toString(); | |
| int si=config->value( "Editor/Font Size",10).toInt(); | |
| #else | |
| if (xf.contains("DejaVu Sans Mono",Qt::CaseInsensitive)) deft="DejaVu Sans Mono"; | |
| else if (xf.contains("Lucida Sans Typewriter",Qt::CaseInsensitive)) deft="Lucida Sans Typewriter"; | |
| else deft=qApp->font().family(); | |
| QString fam=config->value("Editor/Font Family",deft).toString(); | |
| int si=config->value( "Editor/Font Size",qApp->font().pointSize()).toInt(); | |
| #endif | |
| QFont F(fam,si); | |
| EditorFont=F; | |
| tabspaces=config->value( "Editor/TabSpaces",false).toBool(); | |
| tabwidth=config->value( "Editor/TabWidth",4).toInt(); | |
| wordwrap=config->value( "Editor/WordWrap",true).toBool(); | |
| watchfiles=config->value( "Editor/Watcher",false).toBool(); | |
| autosave=config->value( "Editor/AutoSave",false).toBool(); | |
| parenmatch=config->value( "Editor/Parentheses Matching",true).toBool(); | |
| showline=config->value( "Editor/Line Numbers",true).toBool(); | |
| completion=config->value( "Editor/Completion",true).toBool(); | |
| userCompletionList=config->value( "Editor/UserCompletion",true).toStringList(); | |
| shortcuts.clear(); | |
| QStringList data,shortcut; | |
| data=config->value("Shortcuts/data").toStringList(); | |
| shortcut=config->value("Shortcuts/shortcut").toStringList(); | |
| QStringListIterator dataiterator(data); | |
| QStringListIterator shortcutiterator(shortcut); | |
| while ( dataiterator.hasNext() && shortcutiterator.hasNext()) | |
| { | |
| QString d=dataiterator.next(); | |
| if (!d.isEmpty()) shortcuts.insert(d,shortcutiterator.next()); | |
| } | |
| showoutputview=config->value("Show/OutputView",false).toBool(); | |
| showstructview=config->value( "Show/Structureview",true).toBool(); | |
| showpdfview=config->value( "Show/Pdfview",true).toBool(); | |
| showsourceview=config->value( "Show/Sourceview",false).toBool(); | |
| showfilesview=config->value( "Show/Filesview",false).toBool(); | |
| showPstricks=config->value( "Show/Pstricks",true).toBool(); | |
| showMp=config->value( "Show/Metapost",true).toBool(); | |
| showTikz=config->value( "Show/Tikz",true).toBool(); | |
| showAsy=config->value( "Show/Asymptote",true).toBool(); | |
| showEmphasis=config->value( "Show/Emphasis",true).toBool(); | |
| showNewline=config->value( "Show/Newline",true).toBool(); | |
| showMathmode=config->value( "Show/Mathmode",true).toBool(); | |
| showIndice=config->value( "Show/Indice",true).toBool(); | |
| showPuissance=config->value( "Show/Puissance",true).toBool(); | |
| showSmallfrac=config->value( "Show/Smallfrac",true).toBool(); | |
| showDfrac=config->value( "Show/Dfrac",true).toBool(); | |
| showRacine=config->value( "Show/Racine",true).toBool(); | |
| extra_path=config->value("Tools/ExtraPath","").toString(); | |
| useoutputdir=config->value( "Tools/OutputDir",false).toBool(); | |
| quickmode=config->value( "Tools/Quick Mode",3).toInt(); | |
| QString baseName = qApp->style()->objectName(); | |
| builtinpdfview=config->value("Tools/IntegratedPdfViewer",true).toBool(); | |
| embedinternalpdf=config->value("Tools/PdfInternalViewEmbed", screen.width() > 1400).toBool(); | |
| singleviewerinstance=config->value("Tools/SingleViewerInstance",false).toBool(); | |
| htlatex_options=config->value("Tools/HtOptions","\"\" \"\" \"\" -interaction=nonstopmode").toString(); | |
| #if defined(Q_OS_MAC) | |
| keyToggleFocus=config->value("Shortcuts/togglefocus","Ctrl+$").toString(); | |
| latex_command=config->value("Tools/Latex","\"/usr/texbin/latex\" -interaction=nonstopmode %.tex").toString(); | |
| dvips_command=config->value("Tools/Dvips","\"/usr/texbin/dvips\" -o %.ps %.dvi").toString(); | |
| ps2pdf_command=config->value("Tools/Ps2pdf","\"/usr/local/bin/ps2pdf\" %.ps").toString(); | |
| makeindex_command=config->value("Tools/Makeindex","\"/usr/texbin/makeindex\" %.idx").toString(); | |
| bibtex_command=config->value("Tools/Bibtex","\"/usr/texbin/bibtex\" %.aux").toString(); | |
| pdflatex_command=config->value("Tools/Pdflatex","\"/usr/texbin/pdflatex\" -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| xelatex_command=config->value("Tools/Xelatex","\"/usr/texbin/xelatex\" -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| lualatex_command=config->value("Tools/Lualatex","\"/usr/texbin/lualatex\" -interaction=nonstopmode %.tex").toString(); | |
| if (lualatex_command.isEmpty()) lualatex_command=QString("\"/usr/texbin/lualatex\" -interaction=nonstopmode %.tex"); | |
| if (xelatex_command.isEmpty()) xelatex_command=QString("\"/usr/texbin/xelatex\" -synctex=1 -interaction=nonstopmode %.tex"); | |
| dvipdf_command=config->value("Tools/Dvipdf","\"/usr/texbin/dvipdfm\" %.dvi").toString(); | |
| metapost_command=config->value("Tools/Metapost","\"/usr/texbin/mpost\" --interaction nonstopmode ").toString(); | |
| viewdvi_command=config->value("Tools/Dvi","open %.dvi").toString(); | |
| viewps_command=config->value("Tools/Ps","open %.ps").toString(); | |
| viewpdf_command=config->value("Tools/Pdf","open %.pdf").toString(); | |
| ghostscript_command=config->value("Tools/Ghostscript","/usr/local/bin/gs").toString(); | |
| asymptote_command=config->value("Tools/Asymptote","/usr/texbin/asy %.asy").toString(); | |
| latexmk_command=config->value("Tools/Latexmk","\"/usr/texbin/latexmk\" -e \"$pdflatex=q/pdflatex -synctex=1 -interaction=nonstopmode/\" -pdf %.tex").toString(); | |
| sweave_command=config->value("Tools/Sweave","R CMD Sweave %.Rnw").toString(); | |
| texdoc_command=config->value("Tools/Texdoc","texdoc").toString(); | |
| htlatex_command=config->value("Tools/Htlatex","/usr/texbin/htlatex").toString(); | |
| if (modern_style) qApp->setStyle(new ManhattanStyle(baseName)); | |
| quick_asy_command=config->value("Tools/QuickAsy","/usr/texbin/asy -f pdf -noView %.asy|open %.pdf").toString(); | |
| lp_options=config->value("Tools/LP","-o fitplot").toString(); | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| keyToggleFocus=config->value("Shortcuts/togglefocus","Ctrl+Space").toString(); | |
| latex_command=config->value("Tools/Latex","latex -interaction=nonstopmode %.tex").toString(); | |
| dvips_command=config->value("Tools/Dvips","dvips -Pdownload35 -o %.ps %.dvi").toString(); | |
| ps2pdf_command=config->value("Tools/Ps2pdf","ps2pdf %.ps").toString(); | |
| makeindex_command=config->value("Tools/Makeindex","makeindex %.idx").toString(); | |
| bibtex_command=config->value("Tools/Bibtex","bibtex %").toString(); | |
| //bibtex %.aux | |
| pdflatex_command=config->value("Tools/Pdflatex","pdflatex -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| xelatex_command=config->value("Tools/Xelatex","xelatex -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| lualatex_command=config->value("Tools/Lualatex","lualatex -interaction=nonstopmode %.tex").toString(); | |
| dvipdf_command=config->value("Tools/Dvipdf","dvipdfm %.dvi").toString(); | |
| metapost_command=config->value("Tools/Metapost","mpost --interaction nonstopmode ").toString(); | |
| viewdvi_command=config->value("Tools/Dvi","\"C:/Program Files/MiKTeX 2.9/miktex/bin/yap.exe\" %.dvi").toString(); | |
| viewps_command=config->value("Tools/Ps","\"C:/Program Files/Ghostgum/gsview/gsview32.exe\" %.ps").toString(); | |
| viewpdf_command=config->value("Tools/Pdf","\"C:/Program Files/Adobe/Reader 11.0/Reader/AcroRd32.exe\" %.pdf").toString(); | |
| ghostscript_command=config->value("Tools/Ghostscript","\"C:/Program Files/gs/gs9.07/bin/gswin32c.exe\"").toString(); | |
| asymptote_command=config->value("Tools/Asymptote","\"C:/Program Files/Asymptote/asy.exe\" %.asy").toString(); | |
| latexmk_command=config->value("Tools/Latexmk","latexmk -e \"$pdflatex=q/pdflatex -synctex=1 -interaction=nonstopmode/\" -pdf %.tex").toString(); | |
| sweave_command=config->value("Tools/Sweave","C:/Program Files/R/R-2.13.2/bin/R.exe CMD Sweave %.Rnw").toString(); | |
| texdoc_command=config->value("Tools/Texdoc","texdoc").toString(); | |
| htlatex_command=config->value("Tools/Htlatex","htlatex").toString(); | |
| QString yap="C:/Program Files/MiKTeX 2.9/miktex/bin/yap.exe"; | |
| QString gsview="C:/Program Files/Ghostgum/gsview/gsview32.exe"; | |
| QString gswin="C:/Program Files/gs/gs9.07/bin/gswin32c.exe"; | |
| QString acro="C:/Program Files/Adobe/Reader 11.0/Reader/AcroRd32.exe"; | |
| if (new_user) | |
| { | |
| if (!QFileInfo(gswin).exists()) | |
| { | |
| if (QFileInfo("C:/Program Files (x86)/gs/gs9.05/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs9.07/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs9.05/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs9.05/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs9.05/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs9.05/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs9.04/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs9.04/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs9.04/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs9.04/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs9.02/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs9.02/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs9.02/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs9.02/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs9.00/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs9.00/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs9.00/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs9.00/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs8.71/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs8.71/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs8.71/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs8.71/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs8.64/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs8.64/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs8.64/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs8.65/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs8.63/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs8.63/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs8.63/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs8.63/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files/gs/gs8.62/bin/gswin32c.exe").exists()) gswin="C:/Program Files/gs/gs8.62/bin/gswin32c.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/gs/gs8.62/bin/gswin32c.exe").exists()) gswin="C:/Program Files (x86)/gs/gs8.62/bin/gswin32c.exe"; | |
| } | |
| ghostscript_command="\""+gswin+"\""; | |
| if (!QFileInfo(yap).exists()) | |
| { | |
| if (QFileInfo("C:/Program Files (x86)/MiKTeX 2.9/miktex/bin/yap.exe").exists()) yap="C:/Program Files (x86)/MiKTeX 2.9/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files/MiKTeX 3.0/miktex/bin/yap.exe").exists()) yap="C:/Program Files/MiKTeX 3.0/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/MiKTeX 3.0/miktex/bin/yap.exe").exists()) yap="C:/Program Files (x86)/MiKTeX 3.0/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files/MiKTeX 2.8/miktex/bin/yap.exe").exists()) yap="C:/Program Files/MiKTeX 2.8/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/MiKTeX 2.8/miktex/bin/yap.exe").exists()) yap="C:/Program Files (x86)/MiKTeX 2.8/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files/MiKTeX 2.7/miktex/bin/yap.exe").exists()) yap="C:/Program Files/MiKTeX 2.7/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/MiKTeX 2.7/miktex/bin/yap.exe").exists()) yap="C:/Program Files (x86)/MiKTeX 2.7/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files/MiKTeX 2.5/miktex/bin/yap.exe").exists()) yap="C:/Program Files/MiKTeX 2.5/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/MiKTeX 2.5/miktex/bin/yap.exe").exists()) yap="C:/Program Files (x86)/MiKTeX 2.5/miktex/bin/yap.exe"; | |
| else if (QFileInfo("C:/texlive/2009/bin/win32/dviout.exe").exists()) yap="C:/texlive/2009/bin/win32/dviout.exe"; | |
| else if (QFileInfo("C:/texlive/2010/bin/win32/dviout.exe").exists()) yap="C:/texlive/2010/bin/win32/dviout.exe"; | |
| else if (QFileInfo("C:/texlive/2011/bin/win32/dviout.exe").exists()) yap="C:/texlive/2011/bin/win32/dviout.exe"; | |
| else if (QFileInfo("C:/texlive/2012/bin/win32/dviout.exe").exists()) yap="C:/texlive/2012/bin/win32/dviout.exe"; | |
| else if (QFileInfo("C:/texlive/2013/bin/win32/dviout.exe").exists()) yap="C:/texlive/2013/bin/win32/dviout.exe"; | |
| } | |
| viewdvi_command="\""+yap+"\" %.dvi"; | |
| if (!QFileInfo(gsview).exists()) | |
| { | |
| if (QFileInfo("C:/Program Files (x86)/Ghostgum/gsview/gsview32.exe").exists()) gsview="C:/Program Files (x86)/Ghostgum/gsview/gsview32.exe"; | |
| else if (QFileInfo("C:/texlive/2009/bin/win32/psv.exe").exists()) gsview="C:/texlive/2009/bin/win32/psv.exe"; | |
| else if (QFileInfo("C:/texlive/2010/bin/win32/psv.exe").exists()) gsview="C:/texlive/2010/bin/win32/psv.exe"; | |
| else if (QFileInfo("C:/texlive/2011/bin/win32/psv.exe").exists()) gsview="C:/texlive/2011/bin/win32/psv.exe"; | |
| else if (QFileInfo("C:/texlive/2012/bin/win32/psv.exe").exists()) gsview="C:/texlive/2012/bin/win32/psv.exe"; | |
| else if (QFileInfo("C:/texlive/2013/bin/win32/psv.exe").exists()) gsview="C:/texlive/2012/bin/win32/psv.exe"; | |
| } | |
| viewps_command="\""+gsview+"\" %.ps"; | |
| if (!QFileInfo(acro).exists()) | |
| { | |
| if (QFileInfo("C:/Program Files (x86)/Adobe/Reader 11.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files (x86)/Adobe/Reader 11.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files/Adobe/Reader 10.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files/Adobe/Reader 10.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files/Adobe/Reader 9.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files/Adobe/Reader 9.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/Adobe/Reader 9.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files (x86)/Adobe/Reader 9.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files/Adobe/Reader 8.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files/Adobe/Reader 8.0/Reader/AcroRd32.exe"; | |
| else if (QFileInfo("C:/Program Files (x86)/Adobe/Reader 8.0/Reader/AcroRd32.exe").exists()) acro="C:/Program Files (x86)/Adobe/Reader 8.0/Reader/AcroRd32.exe"; | |
| } | |
| viewpdf_command="\""+acro+"\" %.pdf"; | |
| } | |
| //\"C:/Program Files/MiKTeX 2.7/miktex/bin/yap.exe\" -1 -s @%.tex %.dvi | |
| quick_asy_command=config->value("Tools/QuickAsy","\"C:/Program Files/Asymptote/asy.exe\" -f pdf -noView %.asy|"+viewpdf_command).toString(); | |
| lp_options=config->value("Tools/LP","").toString(); | |
| if (modern_style) qApp->setStyle(new ManhattanStyle(baseName)); | |
| #endif | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| keyToggleFocus=config->value("Shortcuts/togglefocus","Ctrl+Space").toString(); | |
| int desktop_env=1; // 1 : no kde ; 2: kde ; 3 : kde4 ; | |
| QStringList styles = QStyleFactory::keys(); | |
| QString kdesession= ::getenv("KDE_FULL_SESSION"); | |
| QString kdeversion= ::getenv("KDE_SESSION_VERSION"); | |
| if (!kdesession.isEmpty()) desktop_env=2; | |
| if (!kdeversion.isEmpty()) desktop_env=3; | |
| //desktop_env=1; | |
| latex_command=config->value("Tools/Latex","latex -interaction=nonstopmode %.tex").toString(); | |
| dvips_command=config->value("Tools/Dvips","dvips -o %.ps %.dvi").toString(); | |
| ps2pdf_command=config->value("Tools/Ps2pdf","ps2pdf %.ps").toString(); | |
| makeindex_command=config->value("Tools/Makeindex","makeindex %.idx").toString(); | |
| bibtex_command=config->value("Tools/Bibtex","bibtex %.aux").toString(); | |
| pdflatex_command=config->value("Tools/Pdflatex","pdflatex -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| xelatex_command=config->value("Tools/Xelatex","xelatex -synctex=1 -interaction=nonstopmode %.tex").toString(); | |
| lualatex_command=config->value("Tools/Lualatex","lualatex -interaction=nonstopmode %.tex").toString(); | |
| dvipdf_command=config->value("Tools/Dvipdf","dvipdfm %.dvi").toString(); | |
| metapost_command=config->value("Tools/Metapost","mpost --interaction nonstopmode ").toString(); | |
| // xdvi %.dvi -sourceposition @:%.tex | |
| // kdvi "file:%.dvi#src:@ %.tex" | |
| switch (desktop_env) | |
| { | |
| case 1: | |
| { | |
| viewdvi_command=config->value("Tools/Dvi","evince %.dvi").toString(); | |
| viewps_command=config->value("Tools/Ps","evince %.ps").toString(); | |
| viewpdf_command=config->value("Tools/Pdf","evince %.pdf").toString(); | |
| }break; | |
| case 2: | |
| { | |
| viewdvi_command=config->value("Tools/Dvi","kdvi %.dvi").toString(); | |
| viewps_command=config->value("Tools/Ps","kghostview %.ps").toString(); | |
| viewpdf_command=config->value("Tools/Pdf","kpdf %.pdf").toString(); | |
| }break; | |
| case 3: | |
| { | |
| viewdvi_command=config->value("Tools/Dvi","okular %.dvi").toString(); | |
| viewps_command=config->value("Tools/Ps","okular %.ps").toString(); | |
| viewpdf_command=config->value("Tools/Pdf","okular %.pdf").toString(); | |
| }break; | |
| } | |
| ghostscript_command=config->value("Tools/Ghostscript","gs").toString(); | |
| asymptote_command=config->value("Tools/Asymptote","asy %.asy").toString(); | |
| latexmk_command=config->value("Tools/Latexmk","latexmk -e \"$pdflatex=q/pdflatex -synctex=1 -interaction=nonstopmode/\" -pdf %.tex").toString(); | |
| sweave_command=config->value("Tools/Sweave","R CMD Sweave %.Rnw").toString(); | |
| texdoc_command=config->value("Tools/Texdoc","texdoc").toString(); | |
| htlatex_command=config->value("Tools/Htlatex","htlatex").toString(); | |
| x11style=config->value( "X11/Style","Plastique").toString(); | |
| if (xf.contains("DejaVu Sans",Qt::CaseInsensitive)) deft="DejaVu Sans"; | |
| else if (xf.contains("DejaVu Sans LGC",Qt::CaseInsensitive)) deft="DejaVu Sans LGC"; | |
| else if (xf.contains("Bitstream Vera Sans",Qt::CaseInsensitive)) deft="Bitstream Vera Sans"; | |
| else if (xf.contains("Luxi Sans",Qt::CaseInsensitive)) deft="Luxi Sans"; | |
| else deft=qApp->font().family(); | |
| x11fontfamily=config->value("X11/Font Family",deft).toString(); | |
| x11fontsize=config->value( "X11/Font Size","10").toInt(); | |
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |
| if (modern_style) | |
| { | |
| qApp->setStyle(new ManhattanStyle(QLatin1String("fusion"))); | |
| } | |
| // else | |
| // { | |
| // QApplication::setStyle(QStyleFactory::create("fusion")); | |
| // } | |
| #else | |
| if (modern_style) | |
| { | |
| if (desktop_env ==1) //no-kde | |
| { | |
| if (styles.contains("GTK+")) qApp->setStyle(new ManhattanStyle(QString("GTK+")));//gtkstyle | |
| else qApp->setStyle(new ManhattanStyle(QString("Cleanlooks"))); | |
| } | |
| else if ((desktop_env ==3) && (styles.contains("Oxygen"))) qApp->setStyle(new ManhattanStyle(QString("Oxygen"))); //kde4+oxygen | |
| else qApp->setStyle(new ManhattanStyle(QString("Plastique"))); //others | |
| QString baseStyleName = qApp->style()->objectName(); //fallback | |
| if (baseStyleName == QLatin1String("Windows")) qApp->setStyle(new ManhattanStyle(QString("Plastique"))); //fallback | |
| } | |
| else | |
| { | |
| if (desktop_env ==1) //no-kde | |
| { | |
| if (styles.contains("GTK+")) QApplication::setStyle(QStyleFactory::create("GTK+"));//gtkstyle | |
| else QApplication::setStyle(QStyleFactory::create("Cleanlooks")); | |
| } | |
| else if ((desktop_env ==3) && (styles.contains("Oxygen"))) QApplication::setStyle(QStyleFactory::create("Oxygen")); //kde4+oxygen | |
| else QApplication::setStyle(QStyleFactory::create("Plastique")); //others | |
| QString baseStyleName = qApp->style()->objectName(); //fallback | |
| if (baseStyleName == QLatin1String("Windows")) QApplication::setStyle(QStyleFactory::create("Plastique")); //fallback | |
| } | |
| #endif | |
| // QApplication::setPalette(QApplication::style()->standardPalette()); | |
| QFont x11Font (x11fontfamily,x11fontsize); | |
| QApplication::setFont(x11Font); | |
| #ifdef STATIC_VERSION | |
| QPalette pal = QApplication::palette(); | |
| pal.setColor( QPalette::Active, QPalette::Highlight, QColor("#4490d8") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Highlight, QColor("#4490d8") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Highlight, QColor("#4490d8") ); | |
| pal.setColor( QPalette::Active, QPalette::HighlightedText, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Inactive, QPalette::HighlightedText, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Disabled, QPalette::HighlightedText, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Active, QPalette::Base, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Base, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Base, QColor("#ffffff") ); | |
| pal.setColor( QPalette::Active, QPalette::WindowText, QColor("#000000") ); | |
| pal.setColor( QPalette::Inactive, QPalette::WindowText, QColor("#000000") ); | |
| pal.setColor( QPalette::Disabled, QPalette::WindowText, QColor("#000000") ); | |
| pal.setColor( QPalette::Active, QPalette::Text, QColor("#000000") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Text, QColor("#000000") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Text, QColor("#000000") ); | |
| pal.setColor( QPalette::Active, QPalette::ButtonText, QColor("#000000") ); | |
| pal.setColor( QPalette::Inactive, QPalette::ButtonText, QColor("#000000") ); | |
| pal.setColor( QPalette::Disabled, QPalette::ButtonText, QColor("#000000") ); | |
| if (desktop_env ==3) | |
| { | |
| pal.setColor( QPalette::Active, QPalette::Window, QColor("#eae9e9") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Window, QColor("#eae9e9") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Window, QColor("#eae9e9") ); | |
| pal.setColor( QPalette::Active, QPalette::Button, QColor("#eae9e9") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Button, QColor("#eae9e9") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Button, QColor("#eae9e9") ); | |
| } | |
| else | |
| { | |
| pal.setColor( QPalette::Active, QPalette::Window, QColor("#f6f3eb") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Window, QColor("#f6f3eb") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Window, QColor("#f6f3eb") ); | |
| pal.setColor( QPalette::Active, QPalette::Button, QColor("#f6f3eb") ); | |
| pal.setColor( QPalette::Inactive, QPalette::Button, QColor("#f6f3eb") ); | |
| pal.setColor( QPalette::Disabled, QPalette::Button, QColor("#f6f3eb") ); | |
| } | |
| QApplication::setPalette(pal); | |
| #endif | |
| quick_asy_command=config->value("Tools/QuickAsy","asy -f pdf -noView %.asy|"+viewpdf_command).toString(); | |
| lp_options=config->value("Tools/LP","-o fitplot").toString(); | |
| #endif | |
| userquick_command=config->value("Tools/Userquick","latex -interaction=nonstopmode %.tex|bibtex %.aux|latex -interaction=nonstopmode %.tex|latex -interaction=nonstopmode %.tex|xdvi %.dvi").toString(); | |
| userClassList=config->value("Tools/User Class").toStringList(); | |
| userPaperList=config->value("Tools/User Paper").toStringList(); | |
| userEncodingList=config->value("Tools/User Encoding").toStringList(); | |
| userOptionsList=config->value("Tools/User Options").toStringList(); | |
| userBabelList=config->value("Tools/User Babel").toStringList(); | |
| runIndex=config->value( "Tools/Run","0").toInt(); | |
| viewIndex=config->value( "Tools/View","2").toInt(); | |
| lastDocument=config->value("Files/Last Document","").toString(); | |
| lastTemplate=config->value("Files/Last Template","").toString(); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QString scriptDir=QCoreApplication::applicationDirPath() + "/"; | |
| #else | |
| QString scriptDir=PREFIX"/share/texmaker/"; | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QString scriptDir=QCoreApplication::applicationDirPath() + "/../Resources/"; | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QString scriptDir=QCoreApplication::applicationDirPath() + "/"; | |
| #endif | |
| lastScript=config->value("Files/Last Script",scriptDir).toString(); | |
| recentFilesList=config->value("Files/Recent Files New").toStringList(); | |
| input_encoding=config->value("Files/Input Encoding","UTF-8").toString(); | |
| UserMenuName[0]=config->value("User/Menu1","").toString(); | |
| UserMenuTag[0]=config->value("User/Tag1","").toString(); | |
| UserMenuName[1]=config->value("User/Menu2","").toString(); | |
| UserMenuTag[1]=config->value("User/Tag2","").toString(); | |
| UserMenuName[2]=config->value("User/Menu3","").toString(); | |
| UserMenuTag[2]=config->value("User/Tag3","").toString(); | |
| UserMenuName[3]=config->value("User/Menu4","").toString(); | |
| UserMenuTag[3]=config->value("User/Tag4","").toString(); | |
| UserMenuName[4]=config->value("User/Menu5","").toString(); | |
| UserMenuTag[4]=config->value("User/Tag5","").toString(); | |
| UserMenuName[5]=config->value("User/Menu6","").toString(); | |
| UserMenuTag[5]=config->value("User/Tag6","").toString(); | |
| UserMenuName[6]=config->value("User/Menu7","").toString(); | |
| UserMenuTag[6]=config->value("User/Tag7","").toString(); | |
| UserMenuName[7]=config->value("User/Menu8","").toString(); | |
| UserMenuTag[7]=config->value("User/Tag8","").toString(); | |
| UserMenuName[8]=config->value("User/Menu9","").toString(); | |
| UserMenuTag[8]=config->value("User/Tag9","").toString(); | |
| UserMenuName[9]=config->value("User/Menu10","").toString(); | |
| UserMenuTag[9]=config->value("User/Tag10","").toString(); | |
| UserToolName[0]=config->value("User/ToolName1","").toString(); | |
| UserToolCommand[0]=config->value("User/Tool1","").toString(); | |
| UserToolName[1]=config->value("User/ToolName2","").toString(); | |
| UserToolCommand[1]=config->value("User/Tool2","").toString(); | |
| UserToolName[2]=config->value("User/ToolName3","").toString(); | |
| UserToolCommand[2]=config->value("User/Tool3","").toString(); | |
| UserToolName[3]=config->value("User/ToolName4","").toString(); | |
| UserToolCommand[3]=config->value("User/Tool4","").toString(); | |
| UserToolName[4]=config->value("User/ToolName5","").toString(); | |
| UserToolCommand[4]=config->value("User/Tool5","").toString(); | |
| userTagsList=config->value("User/TagList").toStringList(); | |
| struct_level1=config->value("Structure/Structure Level 1","part").toString(); | |
| struct_level2=config->value("Structure/Structure Level 2","chapter").toString(); | |
| struct_level3=config->value("Structure/Structure Level 3","section").toString(); | |
| struct_level4=config->value("Structure/Structure Level 4","subsection").toString(); | |
| struct_level5=config->value("Structure/Structure Level 5","subsubsection").toString(); | |
| document_class=config->value("Quick/Class","article").toString(); | |
| typeface_size=config->value("Quick/Typeface","10pt").toString(); | |
| paper_size=config->value("Quick/Papersize","a4paper").toString(); | |
| document_encoding=config->value("Quick/Encoding","utf8").toString(); | |
| ams_packages=config->value( "Quick/AMS",true).toBool(); | |
| makeidx_package=config->value( "Quick/MakeIndex",false).toBool(); | |
| babel_package=config->value( "Quick/Babel",false).toBool(); | |
| QString locale = QString(QLocale::system().name()).left(2); | |
| if (locale=="en") babel_default=config->value("Quick/BabelDefault","english").toString(); | |
| else if (locale=="de") babel_default=config->value("Quick/BabelDefault","german").toString(); | |
| else if (locale=="fr") babel_default=config->value("Quick/BabelDefault","french").toString(); | |
| else if (locale=="ru") babel_default=config->value("Quick/BabelDefault","russian").toString(); | |
| else if (locale=="it") babel_default=config->value("Quick/BabelDefault","italian").toString(); | |
| else if (locale=="es") babel_default=config->value("Quick/BabelDefault","spanish").toString(); | |
| else if (locale=="pl") babel_default=config->value("Quick/BabelDefault","polish").toString(); | |
| else if (locale=="fa") babel_default=config->value("Quick/BabelDefault","farsi").toString(); | |
| else if (locale=="cz") babel_default=config->value("Quick/BabelDefault","czech").toString(); | |
| else if (locale=="pt") babel_default=config->value("Quick/BabelDefault","portuguese").toString(); | |
| else if (locale=="sl") babel_default=config->value("Quick/BabelDefault","slovak").toString(); | |
| else if (locale=="gr") babel_default=config->value("Quick/BabelDefault","greek").toString(); | |
| else if (locale=="fi") babel_default=config->value("Quick/BabelDefault","finish").toString(); | |
| else if (locale=="hu") babel_default=config->value("Quick/BabelDefault","magyar").toString(); | |
| else babel_default=config->value("Quick/BabelDefault","").toString(); | |
| geometry_package=config->value( "Quick/Geometry",false).toBool(); | |
| graphicx_package=config->value( "Quick/Graphicx",false).toBool(); | |
| lmodern_package=config->value( "Quick/Lmodern",false).toBool(); | |
| kpfonts_package=config->value( "Quick/Kpfonts",false).toBool(); | |
| fourier_package=config->value( "Quick/Fourier",false).toBool(); | |
| author=config->value("Quick/Author","").toString(); | |
| geometry_options=config->value("Quick/GeometryOptions","left=2cm,right=2cm,top=2cm,bottom=2cm").toString(); | |
| beamer_theme=config->value("Beamer/Theme","Warsaw").toString(); | |
| beamer_size=config->value("Beamer/Size","11pt").toString(); | |
| beamer_encoding=config->value("Beamer/Encoding","utf8").toString(); | |
| beamer_author=config->value("Beamer/Author","").toString(); | |
| if (locale=="en") beamer_babel=config->value("Beamer/BabelDefault","english").toString(); | |
| else if (locale=="de") beamer_babel=config->value("Beamer/BabelDefault","german").toString(); | |
| else if (locale=="fr") beamer_babel=config->value("Beamer/BabelDefault","french").toString(); | |
| else if (locale=="ru") beamer_babel=config->value("Beamer/BabelDefault","russian").toString(); | |
| else if (locale=="it") beamer_babel=config->value("Beamer/BabelDefault","italian").toString(); | |
| else if (locale=="es") beamer_babel=config->value("Beamer/BabelDefault","spanish").toString(); | |
| else if (locale=="pl") beamer_babel=config->value("Beamer/BabelDefault","polish").toString(); | |
| else if (locale=="fa") beamer_babel=config->value("Beamer/BabelDefault","farsi").toString(); | |
| else if (locale=="cz") beamer_babel=config->value("Beamer/BabelDefault","czech").toString(); | |
| else if (locale=="pt") beamer_babel=config->value("Beamer/BabelDefault","portuguese").toString(); | |
| else if (locale=="sl") beamer_babel=config->value("Beamer/BabelDefault","slovak").toString(); | |
| else if (locale=="gr") beamer_babel=config->value("Beamer/BabelDefault","greek").toString(); | |
| else if (locale=="fi") beamer_babel=config->value("Beamer/BabelDefault","finish").toString(); | |
| else if (locale=="hu") beamer_babel=config->value("Beamer/BabelDefault","magyar").toString(); | |
| else beamer_babel=config->value("Beamer/BabelDefault","").toString(); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QString dicDir=QCoreApplication::applicationDirPath() + "/"; | |
| #else | |
| #ifdef DEBIAN_SPELLDIR | |
| QString dicDir=PREFIX"/share/myspell/dicts/"; | |
| #else | |
| QString dicDir=PREFIX"/share/texmaker/"; | |
| #endif | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QString dicDir=QCoreApplication::applicationDirPath() + "/../Resources/"; | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QString dicDir=QCoreApplication::applicationDirPath() + "/"; | |
| #endif | |
| QString defaultDic=dicDir+QString(QLocale::system().name())+".dic"; | |
| QFileInfo fi(defaultDic); | |
| if (!fi.exists() || !fi.isReadable()) defaultDic=dicDir+"en_GB.dic"; | |
| spell_dic=config->value("Spell/Dic",defaultDic).toString(); | |
| QFileInfo fispell(spell_dic); | |
| pdfCheckerLang=fispell.fileName().left(2); | |
| if (!pdfCheckerLang.contains(QRegExp("(de|en|es|fr|id|it|nl|pl|pt|ru)"))) pdfCheckerLang="en"; | |
| spell_ignored_words=config->value("Spell/Words","").toString(); | |
| inlinespellcheck=config->value( "Spell/Inline",true).toBool(); | |
| for (int i=0; i <412 ; i++) | |
| { | |
| symbolScore[i]=config->value( "Symbols/symbol"+QString::number(i),0).toInt(); | |
| } | |
| favoriteSymbolList.clear(); | |
| QList<QVariant> favoriteSymbolSettings = config->value( "Symbols/Favorites" ).toList( ); | |
| if( !favoriteSymbolSettings.isEmpty()) | |
| { | |
| for( int i = 0; i < favoriteSymbolSettings.count( ); i++ ) favoriteSymbolList.append(favoriteSymbolSettings.at(i).toInt()); | |
| } | |
| colorBackground=config->value("Color/Background",QColor("#FFFFFF")).value<QColor>(); | |
| colorLine=config->value("Color/Line",QColor("#ececec")).value<QColor>(); | |
| colorHighlight=config->value("Color/Highlight",QColor("#FF0000")).value<QColor>(); | |
| colorStandard=config->value("Color/Standard",QColor("#000000")).value<QColor>(); | |
| colorComment=config->value("Color/Comment",QColor("#606060")).value<QColor>(); | |
| colorMath=config->value("Color/Math",QColor("#008000")).value<QColor>(); | |
| colorCommand=config->value("Color/Command",QColor("#800000")).value<QColor>(); | |
| colorKeyword=config->value("Color/Keyword",QColor("#0000CC")).value<QColor>(); | |
| colorVerbatim=config->value("Color/Verbatim",QColor("#9A4D00")).value<QColor>(); | |
| colorTodo=config->value("Color/Todo",QColor("#FF0000")).value<QColor>(); | |
| colorKeywordGraphic=config->value("Color/KeywordGraphic",QColor("#006699")).value<QColor>(); | |
| colorNumberGraphic=config->value("Color/NumberGraphic",QColor("#660066")).value<QColor>(); | |
| config->endGroup(); | |
| } | |
| void Texmaker::SaveSettings() | |
| { | |
| SaveLastSession(); | |
| #ifdef USB_VERSION | |
| QSettings config(QCoreApplication::applicationDirPath()+"/texmaker.ini",QSettings::IniFormat); //for USB-stick version | |
| #else | |
| QSettings config(QSettings::IniFormat,QSettings::UserScope,"xm1","texmaker"); | |
| #endif | |
| config.setValue( "IniMode",true); | |
| config.beginGroup( "texmaker" ); | |
| QList<int> sizes; | |
| QList<int>::Iterator it; | |
| config.setValue( "GUI/Style",modern_style); | |
| config.setValue( "GUI/New Version",true); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| config.setValue( "X11/Style",x11style); | |
| config.setValue("X11/Font Family",x11fontfamily); | |
| config.setValue( "X11/Font Size",x11fontsize); | |
| #endif | |
| config.setValue("MainWindowState",saveState(0)); | |
| config.setValue("MainWindowMaximized",windowState().testFlag(Qt::WindowMaximized)); | |
| config.setValue("Splitter1State",splitter1->saveState()); | |
| config.setValue("Splitter2State",splitter2->saveState()); | |
| config.setValue("Splitter3State",splitter3->saveState()); | |
| config.setValue("Geometries/MainwindowWidth", width() ); | |
| config.setValue("Geometries/MainwindowHeight", height() ); | |
| config.setValue("Geometries/MainwindowX", x() ); | |
| config.setValue("Geometries/MainwindowY", y() ); | |
| config.setValue("Print/PaperSize",psize); | |
| int pscale=10; | |
| if (builtinpdfview) | |
| { | |
| if (pdfviewerWindow) pscale= (int) (pdfviewerWindow->getScale()*100); | |
| if (embedinternalpdf && pdfviewerWidget) pscale= (int) (pdfviewerWidget->getScale()*100); | |
| } | |
| config.setValue("PdfView/Scale",pscale); | |
| config.setValue("Editor/Font Family",EditorFont.family()); | |
| config.setValue( "Editor/Font Size",EditorFont.pointSize()); | |
| config.setValue( "Editor/TabSpaces",tabspaces); | |
| config.setValue( "Editor/TabWidth",tabwidth); | |
| config.setValue( "Editor/WordWrap",wordwrap); | |
| config.setValue( "Editor/Watcher",watchfiles); | |
| config.setValue( "Editor/AutoSave",autosave); | |
| config.setValue( "Editor/Parentheses Matching",parenmatch); | |
| config.setValue( "Editor/Line Numbers",showline); | |
| config.setValue( "Editor/Completion",completion); | |
| config.setValue( "Editor/UserCompletion",userCompletionList); | |
| QStringList data,shortcut; | |
| // data.clear(); | |
| // shortcut.clear(); | |
| KeysMap::Iterator its; | |
| for( its = shortcuts.begin(); its != shortcuts.end(); ++its ) | |
| { | |
| data.append(its.key()); | |
| shortcut.append(its.value()); | |
| } | |
| config.setValue("Shortcuts/data",data); | |
| config.setValue("Shortcuts/shortcut",shortcut); | |
| config.setValue("Shortcuts/togglefocus",keyToggleFocus); | |
| config.setValue("Show/OutputView",showoutputview); | |
| config.setValue( "Show/Structureview",showstructview); | |
| config.setValue( "Show/Pdfview",showpdfview); | |
| config.setValue( "Show/Sourceview",showsourceview); | |
| config.setValue( "Show/Filesview",showfilesview); | |
| config.setValue( "Show/Pstricks",showPstricks); | |
| config.setValue( "Show/Metapost",showMp); | |
| config.setValue( "Show/Tikz",showTikz); | |
| config.setValue( "Show/Asymptote",showAsy); | |
| config.setValue( "Show/Emphasis",showEmphasis); | |
| config.setValue( "Show/Newline",showNewline); | |
| config.setValue( "Show/Mathmode",showMathmode); | |
| config.setValue( "Show/Indice",showIndice); | |
| config.setValue( "Show/Puissance",showPuissance); | |
| config.setValue( "Show/Smallfrac",showSmallfrac); | |
| config.setValue( "Show/Dfrac",showDfrac); | |
| config.setValue( "Show/Racine",showRacine); | |
| config.setValue("Tools/ExtraPath",extra_path); | |
| config.setValue("Tools/OutputDir",useoutputdir); | |
| config.setValue("Tools/Quick Mode",quickmode); | |
| config.setValue("Tools/Latex",latex_command); | |
| config.setValue("Tools/Dvi",viewdvi_command); | |
| config.setValue("Tools/Dvips",dvips_command); | |
| config.setValue("Tools/Ps",viewps_command); | |
| config.setValue("Tools/Ps2pdf",ps2pdf_command); | |
| config.setValue("Tools/Makeindex",makeindex_command); | |
| config.setValue("Tools/Bibtex",bibtex_command); | |
| config.setValue("Tools/Pdflatex",pdflatex_command); | |
| config.setValue("Tools/Xelatex",xelatex_command); | |
| config.setValue("Tools/Lualatex",lualatex_command); | |
| config.setValue("Tools/Pdf",viewpdf_command); | |
| config.setValue("Tools/Dvipdf",dvipdf_command); | |
| config.setValue("Tools/Metapost",metapost_command); | |
| config.setValue("Tools/Ghostscript",ghostscript_command); | |
| config.setValue("Tools/Asymptote",asymptote_command); | |
| config.setValue("Tools/Latexmk",latexmk_command); | |
| config.setValue("Tools/Sweave",sweave_command); | |
| config.setValue("Tools/Texdoc",texdoc_command); | |
| config.setValue("Tools/HtOptions",htlatex_options); | |
| config.setValue("Tools/Htlatex",htlatex_command); | |
| config.setValue("Tools/Userquick",userquick_command); | |
| config.setValue("Tools/QuickAsy",quick_asy_command); | |
| config.setValue("Tools/LP",lp_options); | |
| if (userClassList.count()>0) config.setValue("Tools/User Class",userClassList); | |
| if (userPaperList.count()>0) config.setValue("Tools/User Paper",userPaperList); | |
| if (userEncodingList.count()>0) config.setValue("Tools/User Encoding",userEncodingList); | |
| if (userOptionsList.count()>0) config.setValue("Tools/User Options",userOptionsList); | |
| if (userBabelList.count()>0) config.setValue("Tools/User Babel",userBabelList); | |
| config.setValue( "Tools/Run",comboCompil->currentIndex()); | |
| config.setValue( "Tools/View",comboView->currentIndex()); | |
| config.setValue("Tools/IntegratedPdfViewer",builtinpdfview); | |
| config.setValue("Tools/PdfInternalViewEmbed",embedinternalpdf); | |
| config.setValue("Tools/SingleViewerInstance",singleviewerinstance); | |
| config.setValue("Files/Last Document",lastDocument); | |
| config.setValue("Files/Last Template",lastTemplate); | |
| config.setValue("Files/Last Script",lastScript); | |
| /*if (recentFilesList.count()>0)*/ config.setValue("Files/Recent Files New",recentFilesList); | |
| config.setValue("Files/Input Encoding", input_encoding); | |
| config.setValue("User/Menu1",UserMenuName[0]); | |
| config.setValue("User/Tag1",UserMenuTag[0]); | |
| config.setValue("User/Menu2",UserMenuName[1]); | |
| config.setValue("User/Tag2",UserMenuTag[1]); | |
| config.setValue("User/Menu3",UserMenuName[2]); | |
| config.setValue("User/Tag3",UserMenuTag[2]); | |
| config.setValue("User/Menu4",UserMenuName[3]); | |
| config.setValue("User/Tag4",UserMenuTag[3]); | |
| config.setValue("User/Menu5",UserMenuName[4]); | |
| config.setValue("User/Tag5",UserMenuTag[4]); | |
| config.setValue("User/Menu6",UserMenuName[5]); | |
| config.setValue("User/Tag6",UserMenuTag[5]); | |
| config.setValue("User/Menu7",UserMenuName[6]); | |
| config.setValue("User/Tag7",UserMenuTag[6]); | |
| config.setValue("User/Menu8",UserMenuName[7]); | |
| config.setValue("User/Tag8",UserMenuTag[7]); | |
| config.setValue("User/Menu9",UserMenuName[8]); | |
| config.setValue("User/Tag9",UserMenuTag[8]); | |
| config.setValue("User/Menu10",UserMenuName[9]); | |
| config.setValue("User/Tag10",UserMenuTag[9]); | |
| config.setValue("User/ToolName1",UserToolName[0]); | |
| config.setValue("User/Tool1",UserToolCommand[0]); | |
| config.setValue("User/ToolName2",UserToolName[1]); | |
| config.setValue("User/Tool2",UserToolCommand[1]); | |
| config.setValue("User/ToolName3",UserToolName[2]); | |
| config.setValue("User/Tool3",UserToolCommand[2]); | |
| config.setValue("User/ToolName4",UserToolName[3]); | |
| config.setValue("User/Tool4",UserToolCommand[3]); | |
| config.setValue("User/ToolName5",UserToolName[4]); | |
| config.setValue("User/Tool5",UserToolCommand[4]); | |
| config.setValue("User/TagList",userTagsList); | |
| config.setValue("Structure/Structure Level 1",struct_level1); | |
| config.setValue("Structure/Structure Level 2",struct_level2); | |
| config.setValue("Structure/Structure Level 3",struct_level3); | |
| config.setValue("Structure/Structure Level 4",struct_level4); | |
| config.setValue("Structure/Structure Level 5",struct_level5); | |
| config.setValue( "Quick/Class",document_class); | |
| config.setValue( "Quick/Typeface",typeface_size); | |
| config.setValue( "Quick/Papersize",paper_size); | |
| config.setValue( "Quick/Encoding",document_encoding); | |
| config.setValue( "Quick/AMS",ams_packages); | |
| config.setValue( "Quick/MakeIndex",makeidx_package); | |
| config.setValue( "Quick/Babel",babel_package); | |
| config.setValue( "Quick/BabelDefault",babel_default); | |
| config.setValue( "Quick/Geometry",geometry_package); | |
| config.setValue( "Quick/Graphicx",graphicx_package); | |
| config.setValue( "Quick/Lmodern",lmodern_package); | |
| config.setValue( "Quick/Kpfonts",kpfonts_package); | |
| config.setValue( "Quick/Fourier",fourier_package); | |
| config.setValue( "Quick/Author",author); | |
| config.setValue( "Quick/GeometryOptions",geometry_options); | |
| config.setValue( "Beamer/Theme",beamer_theme); | |
| config.setValue( "Beamer/Size",beamer_size); | |
| config.setValue( "Beamer/Encoding",beamer_encoding); | |
| config.setValue( "Beamer/Author",beamer_author); | |
| config.setValue( "Beamer/BabelDefault",beamer_babel); | |
| config.setValue( "Spell/Dic",spell_dic); | |
| config.setValue( "Spell/Words",spell_ignored_words); | |
| config.setValue( "Spell/Inline",inlinespellcheck); | |
| for (int i=0; i <412 ; i++) | |
| { | |
| config.setValue( "Symbols/symbol"+QString::number(i),symbolScore[i]); | |
| } | |
| QList<QVariant> favoriteSymbolSettings; | |
| if( !favoriteSymbolList.isEmpty()) | |
| { | |
| for( int i = 0; i < favoriteSymbolList.count( ); i++ ) favoriteSymbolSettings.append(favoriteSymbolList.at(i)); | |
| } | |
| config.setValue("Symbols/Favorites",favoriteSymbolSettings); | |
| config.setValue("Color/Background",colorBackground); | |
| config.setValue("Color/Line",colorLine); | |
| config.setValue("Color/Highlight",colorHighlight); | |
| config.setValue("Color/Standard",colorStandard); | |
| config.setValue("Color/Comment",colorComment); | |
| config.setValue("Color/Math",colorMath); | |
| config.setValue("Color/Command",colorCommand); | |
| config.setValue("Color/Keyword",colorKeyword); | |
| config.setValue("Color/Verbatim",colorVerbatim); | |
| config.setValue("Color/Todo",colorTodo); | |
| config.setValue("Color/KeywordGraphic",colorKeywordGraphic); | |
| config.setValue("Color/NumberGraphic",colorNumberGraphic); | |
| config.endGroup(); | |
| } | |
| void Texmaker::DeleteSettings() | |
| { | |
| switch( QMessageBox::warning(this, "Texmaker", | |
| tr("Delete settings file?\n(Texmaker will be closed and you will have to restart it)"), | |
| tr("Ok"), tr("Cancel"), | |
| 0, | |
| 1 ) ) | |
| { | |
| case 0: | |
| eraseSettings=true; | |
| fileExit(); | |
| break; | |
| case 1: | |
| default: | |
| return; | |
| break; | |
| } | |
| } | |
| void Texmaker::CopySettings() | |
| { | |
| QFileInfo fi_or(settingsFileName); | |
| if (fi_or.exists()) | |
| { | |
| QFile fichier_or(settingsFileName); | |
| QString to_file = QFileDialog::getSaveFileName(this,tr("Save As"),QDir::homePath(),"Setting files (*.ini);;All files (*.*)"); | |
| if ( !to_file.isEmpty() ) | |
| { | |
| QFileInfo fi_dest(to_file); | |
| if (fi_dest.exists()) | |
| { | |
| QFile fichier_dest(to_file); | |
| fichier_dest.remove(); | |
| fichier_or.copy(to_file); | |
| } | |
| else | |
| { | |
| fichier_or.copy(to_file); | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::ReplaceSettings() | |
| { | |
| switch( QMessageBox::warning(this, "Texmaker", | |
| tr("Replace settings file by a new one?\n(Texmaker will be closed and you will have to restart it)"), | |
| tr("Ok"), tr("Cancel"), | |
| 0, | |
| 1 ) ) | |
| { | |
| case 0: | |
| replaceSettings=true; | |
| fileExit(); | |
| break; | |
| case 1: | |
| default: | |
| return; | |
| break; | |
| } | |
| } | |
| void Texmaker::setPrintPaperSize(const QString &p) | |
| { | |
| psize=p; | |
| } | |
| ////////////////// STRUCTURE /////////////////// | |
| void Texmaker::ShowOpenedFiles() | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(OpenedFilesListWidget); | |
| titleLeftPanel->setText(tr("Opened Files")); | |
| } | |
| void Texmaker::OpenedFileActivated(QListWidgetItem *item) | |
| { | |
| int index=OpenedFilesListWidget->currentRow(); | |
| disconnect(comboFiles, SIGNAL(activated(int)), this, SLOT(listSelectionActivated(int))); | |
| if ((index>-1) && (index<comboFiles->count())) comboFiles->setCurrentIndex(index); | |
| connect(comboFiles, SIGNAL(activated(int)), this, SLOT(listSelectionActivated(int))); | |
| QString f=comboFiles->itemData(index, Qt::UserRole).toString(); | |
| FilesMap::Iterator it; | |
| QString fw32,funix,forig; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| forig=filenames[it.key()]; | |
| fw32=filenames[it.key()]; | |
| funix=filenames[it.key()]; | |
| fw32.replace(QString("\\"),QString("/")); | |
| funix.replace(QString("/"),QString("\\")); | |
| if ( (forig==f) || (fw32==f) || (funix==f)) | |
| { | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| } | |
| } | |
| } | |
| void Texmaker::ShowStructure() | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(StructureTreeWidget); | |
| titleLeftPanel->setText(tr("Structure")); | |
| } | |
| void Texmaker::ShowRelation() //RelationListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(RelationListWidget); | |
| titleLeftPanel->setText(tr("Relation symbols")); | |
| } | |
| void Texmaker::ShowArrow() //ArrowListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(ArrowListWidget); | |
| titleLeftPanel->setText(tr("Arrow symbols")); | |
| } | |
| void Texmaker::ShowMisc() //MiscellaneousListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(MiscellaneousListWidget); | |
| titleLeftPanel->setText(tr("Miscellaneous symbols")); | |
| } | |
| void Texmaker::ShowDelim() //DelimitersListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(DelimitersListWidget); | |
| titleLeftPanel->setText(tr("Delimiters")); | |
| } | |
| void Texmaker::ShowGreek() //GreekListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(GreekListWidget); | |
| titleLeftPanel->setText(tr("Greek letters")); | |
| } | |
| void Texmaker::ShowMostUsed() //MostUsedListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(MostUsedListWidget); | |
| titleLeftPanel->setText(tr("Most used symbols")); | |
| } | |
| void Texmaker::ShowFavorite() //FavoriteListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(FavoriteListWidget); | |
| titleLeftPanel->setText(tr("Favorites symbols")); | |
| } | |
| void Texmaker::ShowPstricks() //PsListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(PsListWidget); | |
| titleLeftPanel->setText(tr("Pstricks Commands")); | |
| } | |
| void Texmaker::ShowLeftRight() //leftrightWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(leftrightWidget); | |
| titleLeftPanel->setText("left/right"); | |
| } | |
| void Texmaker::ShowMplist() //MpListWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(MpListWidget); | |
| titleLeftPanel->setText(tr("MetaPost Commands")); | |
| } | |
| void Texmaker::ShowTikz() //TikzWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(tikzWidget); | |
| titleLeftPanel->setText(tr("Tikz Commands")); | |
| } | |
| void Texmaker::ShowAsy() //AsyWidget | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(asyWidget); | |
| titleLeftPanel->setText(tr("Asymptote Commands")); | |
| } | |
| void Texmaker::ShowUserPanel() | |
| { | |
| LeftPanelStackedWidget->setCurrentWidget(usertagsListWidget); | |
| titleLeftPanel->setText(tr("User")); | |
| } | |
| void Texmaker::UpdateStructure() | |
| { | |
| QFont deft=QFont("DejaVu Sans Condensed",qApp->font().pointSize()); | |
| QTreeWidgetItem *Child,*parent_level[5], *theitem; | |
| QString current; | |
| if (StructureTreeWidget->currentItem()) current=StructureTreeWidget->currentItem()->text(0); | |
| if ( !currentEditorView() ) | |
| { | |
| StructureTreeWidget->clear(); | |
| return; | |
| } | |
| QString shortName = getName(); | |
| if ((shortName.right(4)!=".tex") && (shortName.right(4)!=".Rnw") && (!shortName.startsWith("untitled"))) return; | |
| /*************************************/ | |
| QList<QTreeWidgetItem *> fItems; | |
| bool islabels_expanded=false; | |
| bool isblocks_expanded=true; | |
| fItems=StructureTreeWidget->findItems ("LABELS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| islabels_expanded=fItems.at(0)->isExpanded(); | |
| } | |
| } | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("BLOCKS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| isblocks_expanded=fItems.at(0)->isExpanded(); | |
| } | |
| } | |
| /*************************************/ | |
| StructureTreeWidget->clear(); | |
| int pos; | |
| while ( (pos = (int)shortName.indexOf('/')) != -1 ) | |
| shortName.remove(0,pos+1); | |
| QTreeWidgetItem *top = new QTreeWidgetItem(StructureTreeWidget); | |
| top->setIcon(0,getIcon(":/images/doc.png")); | |
| top->setText(0,shortName); | |
| top->setFont(0,deft); | |
| Child=parent_level[0]=parent_level[1]=parent_level[2]=parent_level[3]=parent_level[4]=top; | |
| labelitem.clear(); | |
| if (singlemode) | |
| { | |
| listbibfiles.clear(); | |
| listchildfiles.clear(); | |
| } | |
| QTreeWidgetItem *toplabel = new QTreeWidgetItem(top); | |
| toplabel->setText(0,"LABELS"); | |
| toplabel->setFont(0,deft); | |
| QTreeWidgetItem *blocklabel = new QTreeWidgetItem(top); | |
| blocklabel->setText(0,"BLOCKS"); | |
| blocklabel->setFont(0,deft); | |
| QString s; | |
| QTextBlock p = currentEditorView()->editor->document()->begin(); | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| //int i; | |
| for (int j = 0; j < structure.count(); j++) | |
| { | |
| //i=structure.at(j).cursor.block().blockNumber(); | |
| switch (structure.at(j).type) | |
| { | |
| case 0: | |
| { | |
| s=structure.at(j).item; | |
| Child = new QTreeWidgetItem(blocklabel); | |
| Child->setText(0,s); | |
| Child->setFont(0,deft); | |
| Child->setText(1,QString::number(j)); | |
| StructureTreeWidget->expandItem(Child); | |
| }break; | |
| case 1: | |
| { | |
| s=structure.at(j).item; | |
| labelitem.append(s); | |
| Child = new QTreeWidgetItem(toplabel); | |
| Child->setText(0,s); | |
| Child->setFont(0,deft); | |
| Child->setText(1,QString::number(j)); | |
| StructureTreeWidget->expandItem(Child); | |
| }break; | |
| case 2: | |
| { | |
| s=structure.at(j).item; | |
| Child = new QTreeWidgetItem(top); | |
| Child->setText(0,s); | |
| Child->setFont(0,deft); | |
| Child->setText(1,QString::number(j)); | |
| Child->setIcon(0,getIcon(":/images/include.png")); | |
| if (listchildfiles.indexOf(s)<0) addIncludeFiles(s); | |
| }break; | |
| case 3: | |
| { | |
| s=structure.at(j).item; | |
| Child = new QTreeWidgetItem(top); | |
| Child->setText(0,s); | |
| Child->setFont(0,deft); | |
| Child->setText(1,QString::number(j)); | |
| Child->setIcon(0,getIcon(":/images/include.png")); | |
| if (listchildfiles.indexOf(s)<0) addIncludeFiles(s); | |
| }break; | |
| case 4: | |
| { | |
| s=structure.at(j).item; | |
| parent_level[0] = new QTreeWidgetItem(top); | |
| parent_level[0]->setText(0,s); | |
| parent_level[0]->setFont(0,deft); | |
| parent_level[0]->setText(1,QString::number(j)); | |
| parent_level[0]->setIcon(0,getIcon(":/images/part.png")); | |
| StructureTreeWidget->expandItem(parent_level[0]); | |
| parent_level[1]=parent_level[2]=parent_level[3]=parent_level[4]=parent_level[0]; | |
| }break; | |
| case 5: | |
| { | |
| s=structure.at(j).item; | |
| parent_level[1] = new QTreeWidgetItem(parent_level[0]); | |
| parent_level[1]->setText(0,s); | |
| parent_level[1]->setFont(0,deft); | |
| parent_level[1]->setText(1,QString::number(j)); | |
| parent_level[1]->setIcon(0,getIcon(":/images/chapter.png")); | |
| StructureTreeWidget->expandItem(parent_level[1]); | |
| parent_level[2]=parent_level[3]=parent_level[4]=parent_level[1]; | |
| }break; | |
| case 6: | |
| { | |
| s=structure.at(j).item; | |
| parent_level[2] = new QTreeWidgetItem(parent_level[1]); | |
| parent_level[2]->setText(0,s); | |
| parent_level[2]->setFont(0,deft); | |
| parent_level[2]->setText(1,QString::number(j)); | |
| parent_level[2]->setIcon(0,getIcon(":/images/section.png")); | |
| StructureTreeWidget->expandItem(parent_level[2]); | |
| parent_level[3]=parent_level[4]=parent_level[2]; | |
| }break; | |
| case 7: | |
| { | |
| s=structure.at(j).item; | |
| parent_level[3] = new QTreeWidgetItem(parent_level[2]); | |
| parent_level[3]->setText(0,s); | |
| parent_level[3]->setFont(0,deft); | |
| parent_level[3]->setText(1,QString::number(j)); | |
| //parent_level[3]->setIcon(0,getIcon(":/images/subsection.png")); | |
| parent_level[4]=parent_level[3]; | |
| }break; | |
| case 8: | |
| { | |
| s=structure.at(j).item; | |
| parent_level[4] = new QTreeWidgetItem(parent_level[3]); | |
| parent_level[4]->setText(0,s); | |
| parent_level[4]->setFont(0,deft); | |
| parent_level[4]->setText(1,QString::number(j)); | |
| //parent_level[4]->setIcon(0,getIcon(":/images/subsubsection.png")); | |
| }break; | |
| case 9: | |
| { | |
| s=structure.at(j).item; | |
| Child = new QTreeWidgetItem(top); | |
| Child->setText(0,s); | |
| Child->setFont(0,deft); | |
| Child->setText(1,QString::number(j)); | |
| Child->setIcon(0,getIcon(":/images/include.png")); | |
| if (listbibfiles.indexOf(s)<0) addBibFiles(s); | |
| }break; | |
| } | |
| } | |
| if (!current.isEmpty()) | |
| { | |
| QList<QTreeWidgetItem *> fItems=StructureTreeWidget->findItems (current,Qt::MatchRecursive,0); | |
| if ((fItems.size()>0 ) && (fItems.at(0))) | |
| { | |
| StructureTreeWidget->setCurrentItem(fItems.at(0)); | |
| theitem=fItems.at(0)->parent(); | |
| while ((theitem) && (theitem!=top)) | |
| { | |
| StructureTreeWidget->expandItem(theitem); | |
| theitem=theitem->parent(); | |
| } | |
| } | |
| } | |
| StructureTreeWidget->setItemExpanded (top,true); | |
| //StructureTreeWidget->setItemExpanded (toplabel,false); | |
| //StructureTreeWidget->setItemExpanded (blocklabel,true); | |
| /*************************************************/ | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("LABELS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| StructureTreeWidget->setItemExpanded(fItems.at(0),islabels_expanded); | |
| } | |
| } | |
| fItems.clear(); | |
| fItems=StructureTreeWidget->findItems ("BLOCKS",Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| if (fItems.at(0)) | |
| { | |
| StructureTreeWidget->setItemExpanded (fItems.at(0),isblocks_expanded); | |
| } | |
| } | |
| /************************************************/ | |
| currentEditorView()->editor->foldableLines.clear(); | |
| int endpreamble = currentEditorView()->editor->searchLine("\\begin{document}"); | |
| if (endpreamble>1) currentEditorView()->editor->foldableLines.insert(0,endpreamble-1); | |
| ParseTree(top); | |
| UpdateChildsLabels(listchildfiles); | |
| updateCompleter(); | |
| if (currentEditorView()) | |
| { | |
| if (completion) currentEditorView()->editor->setCompleter(completer); | |
| else currentEditorView()->editor->setCompleter(0); | |
| currentEditorView()->editor->matchAll(); | |
| } | |
| } | |
| void Texmaker::UpdateChildsLabels(QStringList listfiles) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString shortName = getName(); | |
| if ((shortName.right(4)!=".tex") && (!shortName.startsWith("untitled"))) return; | |
| //currentEditorView()->editor->highlighter->rehighlight(); | |
| int pos; | |
| while ( (pos = (int)shortName.indexOf('/')) != -1 ) | |
| shortName.remove(0,pos+1); | |
| /*********/ | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| QString name=fi.absoluteFilePath(); | |
| QString flname=fi.fileName(); | |
| QString basename=name.left(name.length()-flname.length()); | |
| if (listfiles.count()>0) | |
| { | |
| QString fname; | |
| QRegExp macroName("\\label\\{(.*)\\}", Qt::CaseInsensitive); | |
| macroName.setMinimal(true); | |
| QString line; | |
| for ( int i = 0; i <listfiles.count(); i++ ) | |
| { | |
| fname=listfiles.at(i); | |
| QFileInfo fi(fname); | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| QFile f(fname); | |
| if ( f.open(QIODevice::ReadOnly) ) | |
| { | |
| QTextStream t( &f ); | |
| while ( !t.atEnd() ) | |
| { | |
| line=t.readLine(); | |
| line=line.simplified(); | |
| if (!line.isEmpty()) | |
| { | |
| if (macroName.indexIn(line)>-1) {labelitem.append(macroName.cap(1).trimmed());} | |
| } | |
| } | |
| } | |
| f.close(); | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::UpdateBibliography() | |
| { | |
| if ( !currentEditorView() ) return; | |
| bibitem.clear(); | |
| if (listbibfiles.count()>0) | |
| { | |
| QString fname; | |
| QStringList types; | |
| types << QLatin1String("article") << QLatin1String("book") | |
| << QLatin1String("booklet") << QLatin1String("inbook") | |
| << QLatin1String("incollection") << QLatin1String("inproceedings") | |
| << QLatin1String("manual") << QLatin1String("mastersthesis") | |
| << QLatin1String("misc") << QLatin1String("phdthesis") | |
| << QLatin1String("proceedings") << QLatin1String("techreport") | |
| << QLatin1String("unpublished") << QLatin1String("periodical") | |
| << QLatin1String("conference") << QLatin1String("mvbook") | |
| << QLatin1String("collection") << QLatin1String("mvcollection") | |
| << QLatin1String("online") << QLatin1String("mvproceedings") | |
| << QLatin1String("inproceedings") << QLatin1String("report") | |
| << QLatin1String("thesis") << QLatin1String("electronic") << QLatin1String("patent"); | |
| QRegExp macroName("@("+types.join("|")+")\\s*\\{\\s*(.*),", Qt::CaseInsensitive); | |
| macroName.setMinimal(true); | |
| QString line; | |
| for ( int i = 0; i <listbibfiles.count(); i++ ) | |
| { | |
| fname=listbibfiles.at(i); | |
| QFileInfo fi(fname); | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| QFile f(fname); | |
| if ( f.open(QIODevice::ReadOnly) ) | |
| { | |
| QTextStream t( &f ); | |
| while ( !t.atEnd() ) | |
| { | |
| line=t.readLine(); | |
| line=line.simplified(); | |
| if (!line.isEmpty()) | |
| { | |
| if (macroName.indexIn(line)>-1) bibitem.append(macroName.cap(2).trimmed()); | |
| } | |
| } | |
| } | |
| f.close(); | |
| } | |
| } | |
| } | |
| /************/ | |
| updateCompleter(); | |
| if (currentEditorView()) | |
| { | |
| if (completion) currentEditorView()->editor->setCompleter(completer); | |
| else currentEditorView()->editor->setCompleter(0); | |
| currentEditorView()->editor->matchAll(); | |
| } | |
| } | |
| void Texmaker::ParseTree(QTreeWidgetItem *item) | |
| { | |
| if (item->childCount()>0) | |
| { | |
| for (int i = 0; i < item->childCount(); i++) | |
| { | |
| ItemToRange(item->child(i)); | |
| } | |
| } | |
| if (item->childCount()>0) | |
| { | |
| for (int i = 0; i < item->childCount(); i++) | |
| { | |
| ParseTree(item->child(i)); | |
| } | |
| } | |
| } | |
| int Texmaker::LevelItem(const QTreeWidgetItem *item) | |
| { | |
| int level=0; | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| if ((item) && (structure.count()>0)) | |
| { | |
| int index = item->text(1).toInt(); | |
| if (index<structure.count()) | |
| { | |
| if ((structure.at(index).type<=3) || (structure.at(index).type==9) ) level=0; | |
| else level=structure.at(index).type-3; | |
| } | |
| } | |
| return level; | |
| /*if ((item) && (!structlist.isEmpty())) | |
| { | |
| QStringList::ConstIterator it1 = structitem.begin(); | |
| QList<int>::ConstIterator it3 = structlevel.begin(); | |
| for ( ; it1 !=structitem.end(); ++it1 ) | |
| { | |
| if (*it1==item->text(0)) break; | |
| ++it3; | |
| } | |
| level=*it3; | |
| } | |
| return level;*/ | |
| } | |
| int Texmaker::LineItem(const QTreeWidgetItem *item) | |
| { | |
| int line=-1; | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| if ((item) && (structure.count()>0)) | |
| { | |
| int index = item->text(1).toInt(); | |
| if (index<structure.count()) | |
| { | |
| line=structure.at(index).cursor.block().blockNumber();//line=structure.at(index).line; | |
| } | |
| } | |
| return line; | |
| /*if ((item) && (!structlist.isEmpty())) | |
| { | |
| QStringList::ConstIterator it1 = structitem.begin(); | |
| QStringList::ConstIterator it2 = structlist.begin(); | |
| for ( ; it1 !=structitem.end(); ++it1 ) | |
| { | |
| if (*it1==item->text(0)) break; | |
| ++it2; | |
| } | |
| QString s=*it2; | |
| bool ok; | |
| int l=s.toInt(&ok,10); | |
| if (ok) line=l; | |
| } | |
| return line;*/ | |
| } | |
| void Texmaker::ItemToRange(QTreeWidgetItem *item) | |
| { | |
| if (!item) return; | |
| QTreeWidgetItem *parentitem, *theitem; | |
| theitem=item; | |
| int start=-1; | |
| int end=-1; | |
| int level=LevelItem(item); | |
| int index; | |
| if (level>=1) | |
| { | |
| start=LineItem(theitem); | |
| do | |
| { | |
| parentitem=theitem->parent(); | |
| if (parentitem) | |
| { | |
| index=parentitem->indexOfChild(theitem); | |
| theitem=parentitem; | |
| } | |
| else index=-1; | |
| } | |
| while ((index>=0)&&(index>=parentitem->childCount()-1)&&(LevelItem(parentitem)>=1)); | |
| if (index>=0 && index<parentitem->childCount()-1) end=LineItem(parentitem->child(index+1)); | |
| else | |
| { | |
| end=currentEditorView()->editor->searchLine("\\end{document}"); | |
| if (end<0) end=currentEditorView()->editor->numoflines(); | |
| } | |
| if (start<end-1) {currentEditorView()->editor->foldableLines.insert(start,end-1);} | |
| } | |
| } | |
| void Texmaker::ClickedOnStructure(QTreeWidgetItem *item,int col) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QString name,flname,basename; | |
| bool hasname=true; | |
| if ((singlemode && !currentEditorView()) || finame.startsWith("untitled") || finame=="") | |
| { | |
| hasname=false; | |
| } | |
| else | |
| { | |
| QFileInfo fi(finame); | |
| name=fi.absoluteFilePath(); | |
| flname=fi.fileName(); | |
| basename=name.left(name.length()-flname.length()); | |
| } | |
| if (item) | |
| { | |
| int index = item->text(1).toInt(); | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| if (index<structure.count()) | |
| { | |
| int type=structure.at(index).type; | |
| if (hasname && (type==2) || (type==3)) | |
| { | |
| QString fname=structure.at(index).item; | |
| loadIncludeFiles(fname,".tex"); | |
| } | |
| else if (hasname && (type==9)) | |
| { | |
| QString fname=structure.at(index).item; | |
| loadIncludeFiles(fname,".bib"); | |
| } | |
| else | |
| { | |
| currentEditorView()->editor->gotoLine(structure.at(index).cursor.block().blockNumber()); | |
| if (!hasname) return; | |
| QFileInfo fic(finame); | |
| if (!fic.exists()) return; | |
| QString basename=fic.completeBaseName(); | |
| if (embedinternalpdf && builtinpdfview) | |
| { | |
| if (pdfviewerWidget) | |
| { | |
| if (pdfviewerWidget->pdf_file!=fic.absolutePath()+"/"+basename+".pdf") pdfviewerWidget->openFile(fic.absolutePath()+"/"+basename+".pdf",viewpdf_command,ghostscript_command); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| pdfviewerWidget->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWidget->jumpToPdfFromSource(getName(),structure.at(index).cursor.block().blockNumber()+1); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| //////////TAGS//////////////// | |
| void Texmaker::InsertTag(QString Entity, int dx, int dy) | |
| { | |
| if ( !currentEditorView() ) return; | |
| OutputTextEdit->clear(); | |
| QTextCursor cur=currentEditorView()->editor->textCursor(); | |
| int pos=cur.position(); | |
| if (!Entity.startsWith("\\og")) Entity.replace("{}","{"+QString(0x2022)+"}"); | |
| Entity.replace("[]","["+QString(0x2022)+"]"); | |
| Entity.replace("\n\n","\n"+QString(0x2022)+"\n"); | |
| currentEditorView()->editor->insertWithMemoryIndent(Entity); | |
| cur.setPosition(pos,QTextCursor::MoveAnchor); | |
| if (Entity.contains(QString(0x2022))) | |
| { | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->search(QString(0x2022) ,true,false,true,true,false); | |
| OutputTextEdit->insertLine("Use the Tab key to reach the next "+QString(0x2022)+" field"); | |
| } | |
| else | |
| { | |
| if (dy>0) cur.movePosition(QTextCursor::Down,QTextCursor::MoveAnchor,dy); | |
| if (dx>0) cur.movePosition(QTextCursor::NextCharacter,QTextCursor::MoveAnchor,dx); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| } | |
| currentEditorView()->editor->setFocus(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| logpresent=false; | |
| } | |
| void Texmaker::InsertSymbol(QTableWidgetItem *item) | |
| { | |
| QString code_symbol; | |
| QRegExp rxnumber(";([0-9]+)"); | |
| int number=-1; | |
| int dx; | |
| if (item) | |
| { | |
| if ( rxnumber.indexIn(item->text()) != -1) number=rxnumber.cap(1).toInt(); | |
| if ((number>-1) && (number<412)) symbolScore[number]=symbolScore[number]+1; | |
| code_symbol=item->text().remove(rxnumber); | |
| dx=code_symbol.indexOf("{}",0); | |
| if (dx>-1) InsertTag(code_symbol,dx+1,0); | |
| else InsertTag(code_symbol,code_symbol.length(),0); | |
| SetMostUsedSymbols(); | |
| } | |
| } | |
| void Texmaker::InsertXmlTag(QListWidgetItem *item) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString txt, code, role; | |
| QStringList tagList; | |
| int dx,dy; | |
| if (item && !item->font().bold()) | |
| { | |
| txt=item->text(); | |
| txt.remove(QRegExp("\\[(.*)\\]")); | |
| txt.replace(QRegExp("([^\\\\])\\\\n"), "\\1\n"); | |
| txt.replace(QRegExp("([^\\\\])\\\\n"), "\\1\n"); | |
| role=item->data(Qt::UserRole).toString(); | |
| tagList= role.split("#"); | |
| code=tagList.at(0); | |
| code.remove(QRegExp("\\[(.*)\\]")); | |
| code.replace(QRegExp("([^\\\\])\\\\n"), "\\1\n"); | |
| code.replace(QRegExp("([^\\\\])\\\\n"), "\\1\n"); | |
| dx=tagList.at(1).toInt(); | |
| dy=tagList.at(2).toInt(); | |
| if ((dx==0) && (dy==0)) | |
| { | |
| if (!currentEditorView()->editor->textCursor().hasSelection()) dx=code.length(); | |
| else dx=code.length()-currentEditorView()->editor->textCursor().selectedText().length(); | |
| } | |
| InsertTag(code,dx,dy); | |
| } | |
| } | |
| void Texmaker::InsertUserElement(QListWidgetItem *item) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString txt, code, role; | |
| QStringList tagList; | |
| int dx; | |
| if (item) | |
| { | |
| txt=item->text(); | |
| role=item->data(Qt::UserRole).toString(); | |
| tagList= role.split("#"); | |
| code=tagList.at(0); | |
| if (code.left(1)=="%") | |
| { | |
| QString t=code; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(code); | |
| } | |
| } | |
| } | |
| void Texmaker::InsertFromAction() | |
| { | |
| bool ok; | |
| QString actData; | |
| QStringList tagList; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if ( !currentEditorView() ) return; | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| tagList= actData.split("/"); | |
| InsertTag(tagList.at(0),tagList.at(1).toInt(&ok, 10),tagList.at(2).toInt(&ok, 10)); | |
| OutputTextEdit->insertLine(tagList.at(3)); | |
| } | |
| } | |
| void Texmaker::InsertWithSelectionFromAction() | |
| { | |
| bool ok; | |
| QString actData; | |
| QStringList tagList; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if ( !currentEditorView() ) return; | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| tagList= actData.split("/"); | |
| if (!currentEditorView()->editor->textCursor().hasSelection()) | |
| { | |
| OutputTextEdit->insertLine("You can select a text before using this environment."); | |
| InsertTag(tagList.at(0)+tagList.at(1),tagList.at(2).toInt(&ok, 10),tagList.at(3).toInt(&ok, 10)); | |
| } | |
| else | |
| { | |
| currentEditorView()->editor->cut(); | |
| InsertTag(tagList.at(0)+tagList.at(1),tagList.at(2).toInt(&ok, 10),tagList.at(3).toInt(&ok, 10)); | |
| currentEditorView()->editor->paste(); | |
| // InsertTag(tagList.at(1),0,0); | |
| } | |
| } | |
| } | |
| void Texmaker::InsertWithSelectionFromString(const QString& text) | |
| { | |
| bool ok; | |
| QStringList tagList; | |
| if ( !currentEditorView() ) return; | |
| tagList= text.split("/"); | |
| if (!currentEditorView()->editor->textCursor().hasSelection()) | |
| { | |
| InsertTag(tagList.at(0)+QString(0x2022)+tagList.at(1),tagList.at(2).toInt(&ok, 10),tagList.at(3).toInt(&ok, 10)); | |
| } | |
| else | |
| { | |
| currentEditorView()->editor->cut(); | |
| InsertTag(tagList.at(0)+QString(0x2022)+tagList.at(1),tagList.at(2).toInt(&ok, 10),tagList.at(3).toInt(&ok, 10)); | |
| currentEditorView()->editor->paste(); | |
| // InsertTag(tagList.at(1),0,0); | |
| } | |
| } | |
| void Texmaker::InsertFromString(const QString& text) | |
| { | |
| bool ok; | |
| QStringList tagList; | |
| if ( !currentEditorView() ) return; | |
| tagList= text.split("/"); | |
| InsertTag(tagList.at(0),tagList.at(1).toInt(&ok, 10),tagList.at(2).toInt(&ok, 10)); | |
| } | |
| void Texmaker::InsertBib() | |
| { | |
| if ( !currentEditorView() ) return; | |
| //currentEditorView()->editor->viewport()->setFocus(); | |
| QString tag; | |
| QFileInfo fi(getName()); | |
| tag=QString("\\bibliography{"); | |
| tag +=fi.completeBaseName(); | |
| tag +=QString("}\n"); | |
| InsertTag(tag,0,1); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| OutputTextEdit->insertLine("The argument to \\bibliography refers to the bib file (without extension)"); | |
| OutputTextEdit->insertLine("which should contain your database in BibTeX format."); | |
| OutputTextEdit->insertLine("Texmaker inserts automatically the base name of the TeX file"); | |
| } | |
| void Texmaker::InsertBibLatex() | |
| { | |
| if ( !currentEditorView() ) return; | |
| //currentEditorView()->editor->viewport()->setFocus(); | |
| QString tag; | |
| QFileInfo fi(getName()); | |
| tag=QString("\\addbibresource{"); | |
| tag +=fi.completeBaseName(); | |
| tag +=QString("}\n"); | |
| InsertTag(tag,0,1); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| OutputTextEdit->insertLine("The argument to \\bibliography refers to the bib file (without extension)"); | |
| OutputTextEdit->insertLine("which should contain your database in BibTeX format."); | |
| OutputTextEdit->insertLine("Texmaker inserts automatically the base name of the TeX file"); | |
| } | |
| void Texmaker::InsertStruct() | |
| { | |
| QString actData, tag; | |
| if ( !currentEditorView() ) return; | |
| //currentEditorView()->editor->viewport()->setFocus(); | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| StructDialog *stDlg = new StructDialog(this,actData); | |
| if ( stDlg->exec() ) | |
| { | |
| if (stDlg->ui.checkBox->isChecked()) | |
| {tag=actData+"{";} | |
| else | |
| {tag=actData+"*{";} | |
| tag +=stDlg->ui.TitlelineEdit->text(); | |
| tag +=QString("}\n"); | |
| InsertTag(tag,0,1); | |
| //UpdateStructure(); | |
| } | |
| } | |
| } | |
| void Texmaker::InsertStructFromString(const QString& text) | |
| { | |
| QString tag; | |
| if ( !currentEditorView() ) return; | |
| //currentEditorView()->editor->viewport()->setFocus(); | |
| StructDialog *stDlg = new StructDialog(this,text); | |
| if ( stDlg->exec() ) | |
| { | |
| if (stDlg->ui.checkBox->isChecked()) | |
| {tag=text+"{";} | |
| else | |
| {tag=text+"*{";} | |
| tag +=stDlg->ui.TitlelineEdit->text(); | |
| tag +=QString("}\n"); | |
| InsertTag(tag,0,1); | |
| //UpdateStructure(); | |
| } | |
| } | |
| void Texmaker::InsertImage() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString tag; | |
| QString currentDir=QDir::homePath(); | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| if (!finame.startsWith("untitled")) currentDir=fi.absolutePath(); | |
| QDir rootdir=fi.dir(); | |
| GraphicFileChooser *sfDlg = new GraphicFileChooser(this,tr("Select an image File")); | |
| sfDlg->setFilter("Graphic files (*.eps *.pdf *.png *.jpeg *.jpg *.tiff);;All files (*.*)"); | |
| sfDlg->setDir(currentDir); | |
| if (sfDlg->exec() ) | |
| { | |
| QString fn=sfDlg->fileName(); | |
| QFileInfo fi(rootdir.relativeFilePath(fn)); | |
| if (!sfDlg->ui.moreButton->isChecked()) InsertTag("\\includegraphics[scale=1]{"+fi.filePath()+"} ",26,0); | |
| else | |
| { | |
| tag = "\\begin{figure}["+sfDlg->ui.lineEditPlacement->text()+"]\n"; | |
| if(sfDlg->ui.comboBoxCaption->currentIndex()==0) tag+="\\caption{"+sfDlg->ui.lineEditCaption->text()+"}\n"; | |
| if (sfDlg->ui.checkBoxCentering->isChecked()) tag+="\\centering\n"; | |
| tag+="\\includegraphics[scale=1]{"+fi.filePath()+"}\n"; | |
| if(sfDlg->ui.comboBoxCaption->currentIndex()==1) tag+="\\caption{"+sfDlg->ui.lineEditCaption->text()+"}\n"; | |
| tag+="\\end{figure}\n"; | |
| InsertTag(tag,0,4); | |
| } | |
| } | |
| } | |
| void Texmaker::InsertInclude() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| if (!finame.startsWith("untitled")) currentDir=fi.absolutePath(); | |
| QDir rootdir=fi.dir(); | |
| FileChooser *sfDlg = new FileChooser(this,tr("Select a File")); | |
| sfDlg->setFilter("TeX files (*.tex);;All files (*.*)"); | |
| sfDlg->setDir(currentDir); | |
| if (sfDlg->exec() ) | |
| { | |
| QString fn=sfDlg->fileName(); | |
| QFileInfo fi(rootdir.relativeFilePath(fn)); | |
| QString suff=fi.suffix(); | |
| QString name=fi.filePath(); | |
| name=name.left(name.length()-suff.length()-1); | |
| InsertTag("\\include{"+name+"}",9,0); | |
| } | |
| //UpdateStructure(); | |
| } | |
| void Texmaker::InsertInput() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| if (!finame.startsWith("untitled")) currentDir=fi.absolutePath(); | |
| QDir rootdir=fi.dir(); | |
| FileChooser *sfDlg = new FileChooser(this,tr("Select a File")); | |
| sfDlg->setFilter("TeX files (*.tex);;All files (*.*)"); | |
| sfDlg->setDir(currentDir); | |
| if (sfDlg->exec() ) | |
| { | |
| QString fn=sfDlg->fileName(); | |
| QFileInfo fi(rootdir.relativeFilePath(fn)); | |
| QString suff=fi.suffix(); | |
| QString name=fi.filePath(); | |
| name=name.left(name.length()-suff.length()-1); | |
| InsertTag("\\input{"+name+"}",7,0); | |
| } | |
| //UpdateStructure(); | |
| } | |
| void Texmaker::QuickTabular() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QStringList borderlist, alignlist; | |
| borderlist<< QString("|") << QString("||") << QString("") << QString("@{}"); | |
| alignlist << QString("c") << QString("l") << QString("r") << QString("p{}") << QString(">{\\centering\\arraybackslash}p{}") << QString(">{\\raggedleft\\arraybackslash}p{}"); | |
| QString al=""; | |
| QString vs=""; | |
| QString el=""; | |
| QString tag; | |
| TabDialog *quickDlg = new TabDialog(this,"Tabular"); | |
| QTableWidgetItem *item=new QTableWidgetItem(); | |
| if ( quickDlg->exec() ) | |
| { | |
| int y = quickDlg->ui.spinBoxRows->value(); | |
| int x = quickDlg->ui.spinBoxColumns->value(); | |
| tag = QString("\\begin{tabular}{"); | |
| for ( int j=0;j<x;j++) | |
| { | |
| tag+=borderlist.at(quickDlg->colDataList.at(j).leftborder); | |
| tag+=alignlist.at(quickDlg->colDataList.at(j).alignment); | |
| } | |
| tag+=borderlist.at(quickDlg->ui.comboBoxEndBorder->currentIndex()); | |
| tag +=QString("}\n"); | |
| for ( int i=0;i<y;i++) | |
| { | |
| if (quickDlg->liDataList.at(i).topborder) tag+=QString("\\hline \n"); | |
| if (quickDlg->ui.checkBoxMargin->isChecked()) tag+="\\rule[-1ex]{0pt}{2.5ex} "; | |
| if (quickDlg->liDataList.at(i).merge && (quickDlg->liDataList.at(i).mergeto>quickDlg->liDataList.at(i).mergefrom)) | |
| { | |
| el=""; | |
| for ( int j=0;j<x;j++) | |
| { | |
| item =quickDlg->ui.tableWidget->item(i,j); | |
| if (j==quickDlg->liDataList.at(i).mergefrom-1) | |
| { | |
| if (item) el+=item->text(); | |
| tag+=QString("\\multicolumn{"); | |
| tag+=QString::number(quickDlg->liDataList.at(i).mergeto-quickDlg->liDataList.at(i).mergefrom+1); | |
| tag+=QString("}{"); | |
| if ((j==0) && (quickDlg->colDataList.at(j).leftborder<2)) tag+=borderlist.at(quickDlg->colDataList.at(j).leftborder); | |
| if (quickDlg->colDataList.at(j).alignment<3) tag+=alignlist.at(quickDlg->colDataList.at(j).alignment); | |
| else tag+=QString("c"); | |
| if (quickDlg->liDataList.at(i).mergeto==x) tag+=borderlist.at(quickDlg->ui.comboBoxEndBorder->currentIndex()); | |
| else tag+=borderlist.at(quickDlg->colDataList.at(quickDlg->liDataList.at(i).mergeto).leftborder); | |
| tag+=QString("}{"); | |
| } | |
| else if (j==quickDlg->liDataList.at(i).mergeto-1) | |
| { | |
| if (item) el+=item->text(); | |
| if (el.isEmpty()) el=QString(0x2022); | |
| tag+=el+QString("}"); | |
| if (j<x-1) tag+=" & "; | |
| else tag+=QString(" \\\\ \n"); | |
| } | |
| else if ((j>quickDlg->liDataList.at(i).mergefrom-1) && (j<quickDlg->liDataList.at(i).mergeto-1)) | |
| { | |
| if (item) el+=item->text(); | |
| } | |
| else | |
| { | |
| if (item) | |
| { | |
| if (item->text().isEmpty()) tag +=QString(0x2022); | |
| else tag +=item->text(); | |
| } | |
| else tag +=QString(0x2022); | |
| if (j<x-1) tag+=" & "; | |
| else tag+=QString(" \\\\ \n"); | |
| } | |
| } | |
| } | |
| else | |
| { | |
| for ( int j=0;j<x-1;j++) | |
| { | |
| item =quickDlg->ui.tableWidget->item(i,j); | |
| if (item) | |
| { | |
| if (item->text().isEmpty()) tag +=QString(0x2022)+QString(" & "); | |
| else tag +=item->text()+ QString(" & "); | |
| } | |
| else tag +=QString(0x2022)+QString(" & "); | |
| } | |
| item =quickDlg->ui.tableWidget->item(i,x-1); | |
| if (item) | |
| { | |
| if (item->text().isEmpty()) tag +=QString(0x2022)+QString(" \\\\ \n"); | |
| else tag +=item->text()+ QString(" \\\\ \n"); | |
| } | |
| else tag +=QString(0x2022)+QString(" \\\\ \n"); | |
| } | |
| } | |
| if (quickDlg->ui.checkBoxBorderBottom->isChecked()) tag +=QString("\\hline \n\\end{tabular} "); | |
| else tag +=QString("\\end{tabular} "); | |
| if (tag.contains("arraybackslash")) tag="% \\usepackage{array} is required\n"+tag; | |
| InsertTag(tag,0,0); | |
| } | |
| } | |
| void Texmaker::QuickArray() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString al; | |
| ArrayDialog *arrayDlg = new ArrayDialog(this,"Array"); | |
| QTableWidgetItem *item=new QTableWidgetItem(); | |
| if ( arrayDlg->exec() ) | |
| { | |
| int y = arrayDlg->ui.spinBoxRows->value(); | |
| int x = arrayDlg->ui.spinBoxColumns->value(); | |
| QString env=arrayDlg->ui.comboEnvironment->currentText(); | |
| QString tag = QString("\\begin{")+env+"}"; | |
| if (env=="array") | |
| { | |
| tag+="{"; | |
| if ((arrayDlg->ui.comboAlignment->currentIndex())==0) al=QString("c"); | |
| if ((arrayDlg->ui.comboAlignment->currentIndex())==1) al=QString("l"); | |
| if ((arrayDlg->ui.comboAlignment->currentIndex())==2) al=QString("r"); | |
| for ( int j=0;j<x;j++) {tag +=al;} tag+="}"; | |
| } | |
| tag +=QString("\n"); | |
| for ( int i=0;i<y-1;i++) | |
| { | |
| for ( int j=0;j<x-1;j++) | |
| { | |
| item =arrayDlg->ui.tableWidget->item(i,j); | |
| if (item) tag +=item->text()+ QString(" & "); | |
| else tag +=QString(0x2022)+QString(" & "); | |
| } | |
| item =arrayDlg->ui.tableWidget->item(i,x-1); | |
| if (item) tag +=item->text()+ QString(" \\\\ \n"); | |
| else tag +=QString(0x2022)+QString(" \\\\ \n"); | |
| } | |
| for ( int j=0;j<x-1;j++) | |
| { | |
| item =arrayDlg->ui.tableWidget->item(y-1,j); | |
| if (item) tag +=item->text()+ QString(" & "); | |
| else tag +=QString(0x2022)+QString(" & "); | |
| } | |
| item =arrayDlg->ui.tableWidget->item(y-1,x-1); | |
| if (item) tag +=item->text()+ QString("\n\\end{")+env+"} "; | |
| else tag +=QString(0x2022)+QString("\n\\end{")+env+"} "; | |
| InsertTag(tag,0,0); | |
| } | |
| } | |
| void Texmaker::QuickTabbing() | |
| { | |
| if ( !currentEditorView() ) return; | |
| TabbingDialog *tabDlg = new TabbingDialog(this,"Tabbing"); | |
| if ( tabDlg->exec() ) | |
| { | |
| int x = tabDlg->ui.spinBoxColumns->value(); | |
| int y = tabDlg->ui.spinBoxRows->value(); | |
| QString s=tabDlg->ui.lineEdit->text(); | |
| QString tag = QString("\\begin{tabbing}\n"); | |
| for ( int j=1;j<x;j++) {tag +="\\hspace{"+s+"}\\=";} | |
| tag+="\\kill\n"; | |
| for ( int i=0;i<y-1;i++) | |
| { | |
| for ( int j=1;j<x;j++) {tag +=" "+QString(0x2022)+" \\> ";} | |
| tag+=QString(0x2022)+" \\\\ \n"; | |
| } | |
| for ( int j=1;j<x;j++) {tag +=" "+QString(0x2022)+" \\> ";} | |
| tag +=QString(0x2022)+QString("\n\\end{tabbing} "); | |
| InsertTag(tag,0,2); | |
| } | |
| } | |
| void Texmaker::QuickLetter() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString tag=QString("\\documentclass["); | |
| LetterDialog *ltDlg = new LetterDialog(this,"Letter"); | |
| int f=ltDlg->ui.comboBoxEncoding->findText(document_encoding,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| ltDlg->ui.comboBoxEncoding->setCurrentIndex(f); | |
| if ( ltDlg->exec() ) | |
| { | |
| tag+=ltDlg->ui.comboBoxPt->currentText()+QString(","); | |
| tag+=ltDlg->ui.comboBoxPaper->currentText()+QString("]{letter}"); | |
| tag+=QString("\n"); | |
| if (ltDlg->ui.comboBoxEncoding->currentText()!="NONE") tag+=QString("\\usepackage[")+ltDlg->ui.comboBoxEncoding->currentText()+QString("]{inputenc}"); | |
| if (ltDlg->ui.comboBoxEncoding->currentText().startsWith("utf8x")) tag+=QString(" \\usepackage{ucs}"); | |
| tag+=QString("\n"); | |
| if (ltDlg->ui.checkBox->isChecked()) tag+=QString("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n"); | |
| tag+="\\address{your name and address} \n"; | |
| tag+="\\signature{your signature} \n"; | |
| tag+="\\begin{document} \n"; | |
| tag+="\\begin{letter}{name and address of the recipient} \n"; | |
| tag+="\\opening{saying hello} \n \n"; | |
| tag+="write your letter here \n \n"; | |
| tag+="\\closing{saying goodbye} \n"; | |
| tag+="%\\cc{Cclist} \n"; | |
| tag+="%\\ps{adding a postscript} \n"; | |
| tag+="%\\encl{list of enclosed material} \n"; | |
| tag+="\\end{letter} \n"; | |
| tag+="\\end{document}"; | |
| if (ltDlg->ui.checkBox->isChecked()) {InsertTag(tag,9,5);} | |
| else {InsertTag(tag,9,2);} | |
| } | |
| } | |
| void Texmaker::QuickDocument() | |
| { | |
| QString opt=""; | |
| QString optbabel=""; | |
| int li=3; | |
| int f; | |
| QString fontenc=""; | |
| if ( !currentEditorView() ) fileNew(); | |
| QString tag=QString("\\documentclass["); | |
| QuickDocumentDialog *startDlg = new QuickDocumentDialog(this,"Quick Start"); | |
| startDlg->otherClassList=userClassList; | |
| startDlg->otherPaperList=userPaperList; | |
| startDlg->otherEncodingList=userEncodingList; | |
| startDlg->otherOptionsList=userOptionsList; | |
| startDlg->otherBabelList=userBabelList; | |
| startDlg->Init(); | |
| f=startDlg->ui.comboBoxClass->findText(document_class,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| startDlg->ui.comboBoxClass->setCurrentIndex(f); | |
| f=startDlg->ui.comboBoxSize->findText(typeface_size,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| startDlg->ui.comboBoxSize->setCurrentIndex(f); | |
| f=startDlg->ui.comboBoxPaper->findText(paper_size,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| startDlg->ui.comboBoxPaper->setCurrentIndex(f); | |
| f=startDlg->ui.comboBoxEncoding->findText(document_encoding,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| startDlg->ui.comboBoxEncoding->setCurrentIndex(f); | |
| QList<QListWidgetItem *> babItems=startDlg->ui.listWidgetBabel->findItems(babel_default,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| if (babItems.size()>0) startDlg->ui.listWidgetBabel->setCurrentItem(babItems.at(0)); | |
| startDlg->ui.checkBoxAMS->setChecked(ams_packages); | |
| startDlg->ui.checkBoxIDX->setChecked(makeidx_package); | |
| startDlg->ui.checkBoxBabel->setChecked(babel_package); | |
| startDlg->ui.listWidgetBabel->setEnabled(babel_package); | |
| startDlg->ui.pushButtonBabel->setEnabled(babel_package); | |
| startDlg->ui.checkBoxGeometry->setChecked(geometry_package); | |
| startDlg->ui.lineEditGeometry->setEnabled(geometry_package); | |
| startDlg->ui.checkBoxGraphicx->setChecked(graphicx_package); | |
| startDlg->ui.checkBoxLmodern->setChecked(lmodern_package); | |
| startDlg->ui.checkBoxKpfonts->setChecked(kpfonts_package); | |
| startDlg->ui.checkBoxFourier->setChecked(fourier_package); | |
| startDlg->ui.lineEditAuthor->setText(author); | |
| startDlg->ui.lineEditGeometry->setText(geometry_options); | |
| if ( startDlg->exec() ) | |
| { | |
| tag+=startDlg->ui.comboBoxSize->currentText()+QString(","); | |
| tag+=startDlg->ui.comboBoxPaper->currentText(); | |
| QList<QListWidgetItem *> selectedItems=startDlg->ui.listWidgetOptions->selectedItems(); | |
| for (int i = 0; i < selectedItems.size(); ++i) | |
| { | |
| if ( selectedItems.at(i)) opt+=QString(",")+selectedItems.at(i)->text(); | |
| } | |
| tag+=opt+QString("]{"); | |
| tag+=startDlg->ui.comboBoxClass->currentText()+QString("}"); | |
| tag+=QString("\n"); | |
| if (startDlg->ui.comboBoxEncoding->currentText()!="NONE") tag+=QString("\\usepackage[")+startDlg->ui.comboBoxEncoding->currentText()+QString("]{inputenc}"); | |
| tag+=QString("\n"); | |
| if (startDlg->ui.comboBoxEncoding->currentText().startsWith("utf8x")) | |
| { | |
| tag+=QString("\\usepackage{ucs}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxBabel->isChecked()) | |
| { | |
| QList<QListWidgetItem *> babelItems=startDlg->ui.listWidgetBabel->selectedItems(); | |
| for (int i = 0; i < babelItems.size(); ++i) | |
| { | |
| if ( babelItems.at(i)) | |
| { | |
| if ((babelItems.at(i)->text()=="arabic") && fontenc.isEmpty()) fontenc="LAE,LFE"; | |
| else if ((babelItems.at(i)->text()=="russian") && fontenc.isEmpty()) fontenc="OT1"; | |
| else if ((babelItems.at(i)->text()=="slovak") && fontenc.isEmpty()) fontenc="IL2"; | |
| else if ((babelItems.at(i)->text()=="francais") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="french") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="frenchb") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="portuguese") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="icelandic") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="czech") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="magyar") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="finnish") && fontenc.isEmpty()) fontenc="T1"; | |
| if (i==0) | |
| { | |
| optbabel+=babelItems.at(i)->text(); | |
| babel_default=babelItems.at(i)->text(); | |
| } | |
| else optbabel+=QString(",")+babelItems.at(i)->text(); | |
| } | |
| } | |
| tag+=QString("\\usepackage["+optbabel+"]{babel}\n"); | |
| li=li+1; | |
| if (!fontenc.isEmpty()) | |
| { | |
| tag+=QString("\\usepackage["+fontenc+"]{fontenc}\n"); | |
| li=li+1; | |
| } | |
| } | |
| if (startDlg->ui.checkBoxAMS->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n"); | |
| li=li+3; | |
| } | |
| if (startDlg->ui.checkBoxIDX->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{makeidx}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxGraphicx->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{graphicx}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxLmodern->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{lmodern}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxKpfonts->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{kpfonts}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxFourier->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{fourier}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.checkBoxGeometry->isChecked()) | |
| { | |
| tag+=QString("\\usepackage["+startDlg->ui.lineEditGeometry->text()+"]{geometry}\n"); | |
| li=li+1; | |
| } | |
| if (startDlg->ui.lineEditAuthor->text()!="") | |
| { | |
| tag+="\\author{"+startDlg->ui.lineEditAuthor->text()+"}\n"; | |
| li=li+1; | |
| } | |
| if (startDlg->ui.lineEditTitle->text()!="") | |
| { | |
| tag+="\\title{"+startDlg->ui.lineEditTitle->text()+"}\n"; | |
| li=li+1; | |
| } | |
| tag+=QString("\\begin{document}\n\n\\end{document}"); | |
| InsertTag(tag,0,li); | |
| document_class=startDlg->ui.comboBoxClass->currentText(); | |
| typeface_size=startDlg->ui.comboBoxSize->currentText(); | |
| paper_size=startDlg->ui.comboBoxPaper->currentText(); | |
| document_encoding=startDlg->ui.comboBoxEncoding->currentText(); | |
| ams_packages=startDlg->ui.checkBoxAMS->isChecked(); | |
| makeidx_package=startDlg->ui.checkBoxIDX->isChecked(); | |
| babel_package=startDlg->ui.checkBoxBabel->isChecked(); | |
| geometry_package=startDlg->ui.checkBoxGeometry->isChecked(); | |
| graphicx_package=startDlg->ui.checkBoxGraphicx->isChecked(); | |
| lmodern_package=startDlg->ui.checkBoxLmodern->isChecked(); | |
| kpfonts_package=startDlg->ui.checkBoxKpfonts->isChecked(); | |
| fourier_package=startDlg->ui.checkBoxFourier->isChecked(); | |
| author=startDlg->ui.lineEditAuthor->text(); | |
| geometry_options=startDlg->ui.lineEditGeometry->text(); | |
| userClassList=startDlg->otherClassList; | |
| userPaperList=startDlg->otherPaperList; | |
| userEncodingList=startDlg->otherEncodingList; | |
| userOptionsList=startDlg->otherOptionsList; | |
| userBabelList=startDlg->otherBabelList; | |
| } | |
| } | |
| void Texmaker::QuickBeamer() | |
| { | |
| QString opt=""; | |
| QString optbabel=""; | |
| int f; | |
| QString fontenc=""; | |
| if ( !currentEditorView() ) fileNew(); | |
| QString tag=QString("\\documentclass["); | |
| QuickBeamerDialog *beamDlg = new QuickBeamerDialog(this,"Quick Start"); | |
| beamDlg->Init(); | |
| f=beamDlg->ui.comboBoxTheme->findText(beamer_theme,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| beamDlg->ui.comboBoxTheme->setCurrentIndex(f); | |
| f=beamDlg->ui.comboBoxSize->findText(beamer_size,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| beamDlg->ui.comboBoxSize->setCurrentIndex(f); | |
| f=beamDlg->ui.comboBoxEncoding->findText(beamer_encoding,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| beamDlg->ui.comboBoxEncoding->setCurrentIndex(f); | |
| QList<QListWidgetItem *> babItems=beamDlg->ui.listWidgetBabel->findItems(beamer_babel,Qt::MatchExactly | Qt::MatchCaseSensitive); | |
| if (babItems.size()>0) beamDlg->ui.listWidgetBabel->setCurrentItem(babItems.at(0)); | |
| beamDlg->ui.checkBoxAMS->setChecked(ams_packages); | |
| beamDlg->ui.checkBoxGraphicx->setChecked(graphicx_package); | |
| beamDlg->ui.checkBoxBabel->setChecked(babel_package); | |
| beamDlg->ui.listWidgetBabel->setEnabled(babel_package); | |
| beamDlg->ui.lineEditAuthor->setText(beamer_author); | |
| if ( beamDlg->exec() ) | |
| { | |
| tag+=beamDlg->ui.comboBoxSize->currentText(); | |
| tag+=QString("]{beamer}\n"); | |
| tag+="\\usetheme{"+beamDlg->ui.comboBoxTheme->currentText()+"}\n"; | |
| if (beamDlg->ui.comboBoxEncoding->currentText()!="NONE") tag+=QString("\\usepackage[")+beamDlg->ui.comboBoxEncoding->currentText()+QString("]{inputenc}"); | |
| tag+=QString("\n"); | |
| if (beamDlg->ui.comboBoxEncoding->currentText().startsWith("utf8x")) | |
| { | |
| tag+=QString("\\usepackage{ucs}\n"); | |
| } | |
| if (beamDlg->ui.checkBoxBabel->isChecked()) | |
| { | |
| QList<QListWidgetItem *> babelItems=beamDlg->ui.listWidgetBabel->selectedItems(); | |
| for (int i = 0; i < babelItems.size(); ++i) | |
| { | |
| if ( babelItems.at(i)) | |
| { | |
| if ((babelItems.at(i)->text()=="arabic") && fontenc.isEmpty()) fontenc="LAE,LFE"; | |
| else if ((babelItems.at(i)->text()=="russian") && fontenc.isEmpty()) fontenc="OT1"; | |
| else if ((babelItems.at(i)->text()=="slovak") && fontenc.isEmpty()) fontenc="IL2"; | |
| else if ((babelItems.at(i)->text()=="francais") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="french") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="frenchb") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="portuguese") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="icelandic") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="czech") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="magyar") && fontenc.isEmpty()) fontenc="T1"; | |
| else if ((babelItems.at(i)->text()=="finnish") && fontenc.isEmpty()) fontenc="T1"; | |
| if (i==0) | |
| { | |
| optbabel+=babelItems.at(i)->text(); | |
| beamer_babel=babelItems.at(i)->text(); | |
| } | |
| else optbabel+=QString(",")+babelItems.at(i)->text(); | |
| } | |
| } | |
| tag+=QString("\\usepackage["+optbabel+"]{babel}\n"); | |
| if (!fontenc.isEmpty()) | |
| { | |
| tag+=QString("\\usepackage["+fontenc+"]{fontenc}\n"); | |
| } | |
| } | |
| if (beamDlg->ui.checkBoxAMS->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n"); | |
| } | |
| if (beamDlg->ui.checkBoxGraphicx->isChecked()) | |
| { | |
| tag+=QString("\\usepackage{graphicx}\n"); | |
| } | |
| if (beamDlg->ui.lineEditAuthor->text()!="") | |
| { | |
| tag+="\\author{"+beamDlg->ui.lineEditAuthor->text()+"}\n"; | |
| } | |
| else | |
| { | |
| tag+="%\\author{}\n"; | |
| } | |
| if (beamDlg->ui.lineEditTitle->text()!="") | |
| { | |
| tag+="\\title{"+beamDlg->ui.lineEditTitle->text()+"}\n"; | |
| } | |
| else | |
| { | |
| tag+="%\\title{}\n"; | |
| } | |
| tag+=QString("%\\setbeamercovered{transparent} \n"); | |
| tag+=QString("%\\setbeamertemplate{navigation symbols}{} \n"); | |
| tag+=QString("%\\logo{} \n"); | |
| tag+=QString("%\\institute{} \n"); | |
| tag+=QString("%\\date{} \n"); | |
| tag+=QString("%\\subject{} \n"); | |
| tag+=QString("\\begin{document}\n\n"); | |
| if ((beamDlg->ui.lineEditAuthor->text()!="") || (beamDlg->ui.lineEditTitle->text()!="")) tag+=QString("\\begin{frame}\n\\titlepage\n\\end{frame}\n\n"); | |
| else tag+=QString("%\\begin{frame}\n%\\titlepage\n%\\end{frame}\n\n"); | |
| tag+=QString("%\\begin{frame}\n%\\tableofcontents\n%\\end{frame}\n\n"); | |
| tag+=QString("\\begin{frame}{"+QString(0x2022)+"}\n\n\\end{frame}\n\n"); | |
| tag+=QString("\\end{document}"); | |
| if (currentEditorView()) | |
| { | |
| OutputTextEdit->clear(); | |
| QTextCursor cur=currentEditorView()->editor->textCursor(); | |
| int pos=cur.position();; | |
| currentEditorView()->editor->insertWithMemoryIndent(tag); | |
| cur.setPosition(pos,QTextCursor::MoveAnchor); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->search(QString(0x2022) ,true,false,true,true,false); | |
| OutputTextEdit->insertLine("Use the Tab key to reach the next "+QString(0x2022)+" field"); | |
| currentEditorView()->editor->setFocus(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| logpresent=false; | |
| } | |
| beamer_theme=beamDlg->ui.comboBoxTheme->currentText(); | |
| beamer_size=beamDlg->ui.comboBoxSize->currentText(); | |
| beamer_encoding=beamDlg->ui.comboBoxEncoding->currentText(); | |
| ams_packages=beamDlg->ui.checkBoxAMS->isChecked(); | |
| babel_package=beamDlg->ui.checkBoxBabel->isChecked(); | |
| graphicx_package=beamDlg->ui.checkBoxGraphicx->isChecked(); | |
| beamer_author=beamDlg->ui.lineEditAuthor->text(); | |
| } | |
| } | |
| void Texmaker::InsertBib1() | |
| { | |
| QString tag = QString("@Article{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="journal = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTpages = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,9,0); | |
| OutputTextEdit->insertLine("Bib fields - Article in Journal"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib2() | |
| { | |
| QString tag = QString("@InProceedings{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="booktitle = {},\n"; | |
| tag+="OPTcrossref = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTpages = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTeditor = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTseries = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTorganization = {},\n"; | |
| tag+="OPTpublisher = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,15,0); | |
| OutputTextEdit->insertLine("Bib fields - Article in Conference Proceedings"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib3() | |
| { | |
| QString tag = QString("@InCollection{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="booktitle = {},\n"; | |
| tag+="OPTcrossref = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTpages = {},\n"; | |
| tag+="OPTpublisher = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTeditor = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTseries = {},\n"; | |
| tag+="OPTtype = {},\n"; | |
| tag+="OPTchapter = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTedition = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,14,0); | |
| OutputTextEdit->insertLine("Bib fields - Article in a Collection"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib4() | |
| { | |
| QString tag = QString("@InBook{"+QString(0x2022)+",\n"); | |
| tag+="ALTauthor = {},\n"; | |
| tag+="ALTeditor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="chapter = {},\n"; | |
| tag+="publisher = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTseries = {},\n"; | |
| tag+="OPTtype = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTedition = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTpages = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Chapter or Pages in a Book"); | |
| OutputTextEdit->insertLine( "ALT.... : you have the choice between these two fields"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib5() | |
| { | |
| QString tag = QString("@Proceedings{"+QString(0x2022)+",\n"); | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTeditor = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTseries = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTorganization = {},\n"; | |
| tag+="OPTpublisher = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,13,0); | |
| OutputTextEdit->insertLine("Bib fields - Conference Proceedings"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib6() | |
| { | |
| QString tag = QString("@Book{"+QString(0x2022)+",\n"); | |
| tag+="ALTauthor = {},\n"; | |
| tag+="ALTeditor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="publisher = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTvolume = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTseries = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTedition = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,6,0); | |
| OutputTextEdit->insertLine("Bib fields - Book"); | |
| OutputTextEdit->insertLine( "ALT.... : you have the choice between these two fields"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib7() | |
| { | |
| QString tag = QString("@Booklet{"+QString(0x2022)+",\n"); | |
| tag+="title = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTauthor = {},\n"; | |
| tag+="OPThowpublished = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,9,0); | |
| OutputTextEdit->insertLine("Bib fields - Booklet"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib8() | |
| { | |
| QString tag = QString("@PhdThesis{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="school = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTtype = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,11,0); | |
| OutputTextEdit->insertLine("Bib fields - PhD. Thesis"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib9() | |
| { | |
| QString tag = QString("@MastersThesis{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="school = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTtype = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,15,0); | |
| OutputTextEdit->insertLine("Bib fields - Master's Thesis"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib10() | |
| { | |
| QString tag = QString("@TechReport{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="institution = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTtype = {},\n"; | |
| tag+="OPTnumber = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,12,0); | |
| OutputTextEdit->insertLine("Bib fields - Technical Report"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib11() | |
| { | |
| QString tag = QString("@Manual{"+QString(0x2022)+",\n"); | |
| tag+="title = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTauthor = {},\n"; | |
| tag+="OPTorganization = {},\n"; | |
| tag+="OPTaddress = {},\n"; | |
| tag+="OPTedition = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Technical Manual"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib12() | |
| { | |
| QString tag = QString("@Unpublished{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="note = {},\n"; | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,13,0); | |
| OutputTextEdit->insertLine("Bib fields - Unpublished"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBib13() | |
| { | |
| QString tag = QString("@Misc{"+QString(0x2022)+",\n"); | |
| tag+="OPTkey = {},\n"; | |
| tag+="OPTauthor = {},\n"; | |
| tag+="OPTtitle = {},\n"; | |
| tag+="OPThowpublished = {},\n"; | |
| tag+="OPTmonth = {},\n"; | |
| tag+="OPTyear = {},\n"; | |
| tag+="OPTnote = {},\n"; | |
| tag+="OPTannote = {}\n"; | |
| tag+="}\n"; | |
| InsertTag(tag,6,0); | |
| OutputTextEdit->insertLine("Bib fields - Miscellaneous"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex1() | |
| { | |
| QString tag = QString("@article{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="journaltitle = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "translator" << "annotator" << "commentator" << "subtitle" << "titleaddon" << "editor" << "editora" << "editorb" << "editorc" << "journalsubtitle" << "issuetitle" << "issuesubtitle" << "language" << "origlanguage" << "series" << "volume" << "number" << "eid" << "issue" << "month" << "pages" << "version" << "note" << "issn" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,9,0); | |
| OutputTextEdit->insertLine("Bib fields - Article in Journal"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex2() | |
| { | |
| QString tag = QString("@book{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editor" << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "language" << "origlanguage" << "volume" << "part" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,6,0); | |
| OutputTextEdit->insertLine("Bib fields - Single-volume book"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex3() | |
| { | |
| QString tag = QString("@mvbook{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editor" << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "language" << "origlanguage" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Multi-volume book"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex4() | |
| { | |
| QString tag = QString("@inbook{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="booktitle = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "bookauthor" << "editor" << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "booksubtitle" << "booktitleaddon" << "language" << "origlanguage" << "volume" << "part" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "chapter" << "pages" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - A part of a book"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex5() | |
| { | |
| QString tag = QString("@booklet{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "howpublished" << "type" << "note" << "location" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,9,0); | |
| OutputTextEdit->insertLine("Bib fields - A book-like work without a formal publisher"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex6() | |
| { | |
| QString tag = QString("@collection{"+QString(0x2022)+",\n"); | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "language" << "origlanguage" << "volume" << "part" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,11,0); | |
| OutputTextEdit->insertLine("Bib fields - Single-volume collection"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex7() | |
| { | |
| QString tag = QString("@mvcollection{"+QString(0x2022)+",\n"); | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "language" << "origlanguage" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,13,0); | |
| OutputTextEdit->insertLine("Bib fields - Multi-volume collection"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex8() | |
| { | |
| QString tag = QString("@incollection{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="booktitle = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editora" << "editorb" << "editorc" << "translator" << "annotator" << "commentator" << "introduction" << "foreword" << "afterword" << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "booksubtitle" << "booktitleaddon" << "language" << "origlanguage" << "volume" << "part" << "edition" << "volumes" << "series" << "number" << "note" << "publisher" << "location" << "isbn" << "chapter" << "pages" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,13,0); | |
| OutputTextEdit->insertLine("Bib fields - A part of a collection"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex9() | |
| { | |
| QString tag = QString("@manual{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "edition" << "type" << "series" << "number" << "version" << "note" << "organization" << "publisher" << "location" << "isbn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Technical documentation"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex10() | |
| { | |
| QString tag = QString("@misc{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "howpublished" << "type" << "version" << "note" << "organization" << "location" << "date" << "month" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,6,0); | |
| OutputTextEdit->insertLine("Bib fields - Miscellaneous"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex11() | |
| { | |
| QString tag = QString("@online{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| tag+="url = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "version" << "note" << "organization" << "date" << "month" << "addendum" << "pubstate" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Online resource"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex12() | |
| { | |
| QString tag = QString("@periodical{"+QString(0x2022)+",\n"); | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "editora" << "editorb" << "editorc" << "subtitle" << "issuetitle" << "issuesubtitle" << "language" << "series" << "volume" << "number" << "issue" << "date" << "month" << "note" << "issn" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,11,0); | |
| OutputTextEdit->insertLine("Bib fields - Issue of a periodical"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex13() | |
| { | |
| QString tag = QString("@proceedings{"+QString(0x2022)+",\n"); | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "eventtitle" << "eventdate" << "venue" << "language" << "volume" << "part" << "volumes" << "series" << "number" << "note" << "organization" << "publisher" << "location" << "month" << "isbn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,12,0); | |
| OutputTextEdit->insertLine("Bib fields - Single-volume conference proceedings"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex14() | |
| { | |
| QString tag = QString("@mvproceedings{"+QString(0x2022)+",\n"); | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "eventtitle" << "eventdate" << "venue" << "language" << "volumes" << "series" << "number" << "note" << "organization" << "publisher" << "location" << "month" << "isbn" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,14,0); | |
| OutputTextEdit->insertLine("Bib fields - Multi-volume conference proceedings"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex15() | |
| { | |
| QString tag = QString("@inproceedings{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="editor = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="booktitle = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "maintitle" << "mainsubtitle" << "maintitleaddon" << "booksubtitle" << "booktitleaddon" << "eventtitle" << "eventdate" << "venue" << "language" << "volume" << "part" << "volumes" << "series" << "number" << "note" << "organization" << "publisher" << "location" << "month" << "isbn" << "chapter" << "pages" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,14,0); | |
| OutputTextEdit->insertLine("Bib fields - Article in conference proceedings"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex16() | |
| { | |
| QString tag = QString("@report{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="type = {},\n"; | |
| tag+="institution = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "number" << "version" << "note" << "location" << "month" << "isrn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,7,0); | |
| OutputTextEdit->insertLine("Bib fields - Technical report"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex17() | |
| { | |
| QString tag = QString("@thesis{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="type = {},\n"; | |
| tag+="institution = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "subtitle" << "titleaddon" << "language" << "note" << "location" << "month" << "isbn" << "chapter" << "pages" << "pagetotal" << "addendum" << "pubstate" << "doi" << "eprint" << "eprintclass" << "eprinttype" << "url" << "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Thesis"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::InsertBibLatex18() | |
| { | |
| QString tag = QString("@patent{"+QString(0x2022)+",\n"); | |
| tag+="author = {},\n"; | |
| tag+="title = {},\n"; | |
| tag+="number = {},\n"; | |
| tag+="year = {},\n"; | |
| QStringList optfields; | |
| optfields << "holder" << "subtitle" << "titleaddon" << "type" << "version" << "location" << "note"<< "date" << " month" << "year" << "addendum" << "pubstate" <<"doi" << "eprint" << "eprintclass" << "eprinttype" << "url"<< "urldate"; | |
| for ( int i = 0; i <optfields.count(); i++ ) | |
| { | |
| tag+="OPT"+optfields.at(i)+" = {},\n"; | |
| } | |
| tag+="}\n"; | |
| InsertTag(tag,8,0); | |
| OutputTextEdit->insertLine("Bib fields - Paten"); | |
| OutputTextEdit->insertLine( "OPT.... : optional fields (use the 'Clean' command to remove them)"); | |
| } | |
| void Texmaker::CleanBib() | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->removeOptAlt(); | |
| } | |
| void Texmaker::InsertUserTag(QString Entity) | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString pre=currentEditorView()->editor->beginningLine(); | |
| QTextCursor cur=currentEditorView()->editor->textCursor(); | |
| bool selection=cur.hasSelection(); | |
| if (selection) currentEditorView()->editor->cut(); | |
| int pos=cur.position(); | |
| QRegExp rx("(@+)"); | |
| int index=0; | |
| while ((index = rx.indexIn(Entity,index)) != -1) | |
| { | |
| if (rx.cap(1)=="@") Entity.replace(rx.pos(1),1,QString(0x2022)); | |
| else if (rx.cap(1)=="@@") Entity.replace(rx.pos(1),2,"@"); | |
| index += rx.matchedLength(); | |
| } | |
| //Entity.replace("@",QString(0x2022)); | |
| //if (Entity.contains("\n") && !pre.isEmpty()) Entity.replace("\n","\n"+pre); | |
| currentEditorView()->editor->insertWithMemoryIndent(Entity); | |
| cur.setPosition(pos,QTextCursor::MoveAnchor); | |
| int dx=Entity.length(); | |
| if (Entity.contains(QString(0x2022))) | |
| { | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->search(QString(0x2022) ,true,false,true,true,false); | |
| if (selection) currentEditorView()->editor->paste(); | |
| } | |
| else | |
| { | |
| if (dx>0) cur.movePosition(QTextCursor::NextCharacter,QTextCursor::MoveAnchor,dx); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| } | |
| currentEditorView()->editor->setFocus(); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| logpresent=false; | |
| } | |
| void Texmaker::InsertUserTag1() | |
| { | |
| if (UserMenuTag[0].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[0]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[0]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag2() | |
| { | |
| if (UserMenuTag[1].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[1]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[1]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag3() | |
| { | |
| if (UserMenuTag[2].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[2]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[2]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag4() | |
| { | |
| if (UserMenuTag[3].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[3]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[3]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag5() | |
| { | |
| if (UserMenuTag[4].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[4]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[4]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag6() | |
| { | |
| if (UserMenuTag[5].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[5]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[5]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag7() | |
| { | |
| if (UserMenuTag[6].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[6]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[6]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag8() | |
| { | |
| if (UserMenuTag[7].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[7]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[7]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag9() | |
| { | |
| if (UserMenuTag[8].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[8]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[8]); | |
| } | |
| } | |
| void Texmaker::InsertUserTag10() | |
| { | |
| if (UserMenuTag[9].left(1)=="%") | |
| { | |
| QString t=UserMenuTag[9]; | |
| t=t.remove(0,1); | |
| QString s="\\begin{"+t+"}\n"+QString(0x2022)+"\n\\end{"+t+"}\n"; | |
| InsertUserTag(s); | |
| } | |
| else | |
| { | |
| InsertUserTag(UserMenuTag[9]); | |
| } | |
| } | |
| void Texmaker::EditUserMenu() | |
| { | |
| QAction *Act; | |
| UserMenuDialog *umDlg = new UserMenuDialog(this,tr("Edit User &Tags")); | |
| for ( int i = 0; i <= 9; i++ ) | |
| { | |
| umDlg->Name[i]=UserMenuName[i]; | |
| umDlg->Tag[i]=UserMenuTag[i]; | |
| } | |
| umDlg->init(); | |
| if ( umDlg->exec() ) | |
| { | |
| for ( int i = 0; i <= 9; i++ ) | |
| { | |
| UserMenuName[i]=umDlg->Name[i]; | |
| UserMenuTag[i]=umDlg->Tag[i]; | |
| } | |
| user11Menu->clear(); | |
| Act = new QAction("1: "+UserMenuName[0], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag1())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("2: "+UserMenuName[1], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F2); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag2())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("3: "+UserMenuName[2], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F3); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag3())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("4: "+UserMenuName[3], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F4); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag4())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("5: "+UserMenuName[4], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F5); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag5())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("6: "+UserMenuName[5], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F6); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag6())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("7: "+UserMenuName[6], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F7); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag7())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("8: "+UserMenuName[7], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F8); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag8())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("9: "+UserMenuName[8], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F9); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag9())); | |
| user11Menu->addAction(Act); | |
| Act = new QAction("10: "+UserMenuName[9], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::Key_F10); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(InsertUserTag10())); | |
| user11Menu->addAction(Act); | |
| user11Menu->addSeparator(); | |
| Act = new QAction(tr("Edit User &Tags"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(EditUserMenu())); | |
| user11Menu->addAction(Act); | |
| } | |
| } | |
| void Texmaker::SectionCommand() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| QString text=action->text(); | |
| InsertStructFromString("\\"+text); | |
| } | |
| void Texmaker::OtherCommand() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| QString text=action->text(); | |
| if (text=="label") | |
| { | |
| InsertFromString("\\label{} /7/0"); | |
| return; | |
| } | |
| if (text=="ref") | |
| { | |
| InsertRef(); | |
| return; | |
| } | |
| if (text=="pageref") | |
| { | |
| InsertPageRef(); | |
| return; | |
| } | |
| if (text=="index") | |
| { | |
| InsertFromString("\\index{}/7/0"); | |
| return; | |
| } | |
| if (text=="cite") | |
| { | |
| InsertCite(); | |
| //InsertFromString("\\cite{}/6/0"); | |
| return; | |
| } | |
| if (text=="footnote") | |
| { | |
| InsertFromString("\\footnote{}/10/0"); | |
| return; | |
| } | |
| } | |
| void Texmaker::InsertCite() | |
| { | |
| //UpdateStructure(); | |
| QString tag=""; | |
| RefDialog *refDlg = new RefDialog(this,"Bibliography Items"); | |
| refDlg->ui.comboBox->addItems(bibitem); | |
| refDlg->ui.label->setText("Items"); | |
| if (!bibitem.isEmpty() && refDlg->exec() ) | |
| { | |
| tag="\\cite{"+refDlg->ui.comboBox->currentText()+"}"; | |
| InsertTag(tag,tag.length(),0); | |
| } | |
| else InsertTag("\\cite{}",6,0); | |
| OutputTextEdit->insertLine( "\\cite{bibiliography item}"); | |
| } | |
| void Texmaker::InsertRef() | |
| { | |
| //UpdateStructure(); | |
| QString tag=""; | |
| RefDialog *refDlg = new RefDialog(this,"Labels"); | |
| refDlg->ui.comboBox->addItems(labelitem); | |
| if (!labelitem.isEmpty() && refDlg->exec() ) | |
| { | |
| tag="\\ref{"+refDlg->ui.comboBox->currentText()+"}"; | |
| InsertTag(tag,tag.length(),0); | |
| } | |
| else InsertTag("\\ref{}",5,0); | |
| OutputTextEdit->insertLine( "\\ref{key}"); | |
| } | |
| void Texmaker::InsertPageRef() | |
| { | |
| //UpdateStructure(); | |
| QString tag=""; | |
| RefDialog *refDlg = new RefDialog(this,"Labels"); | |
| refDlg->ui.comboBox->addItems(labelitem); | |
| if (!labelitem.isEmpty() && refDlg->exec() ) | |
| { | |
| tag="\\pageref{"+refDlg->ui.comboBox->currentText()+"}"; | |
| InsertTag(tag,tag.length(),0); | |
| } | |
| else InsertTag("\\pageref{}",9,0); | |
| OutputTextEdit->insertLine( "\\pageref{key}"); | |
| } | |
| void Texmaker::SizeCommand() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| QString text=action->text(); | |
| if (text=="tiny") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\tiny /}/7/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{tiny}\n/\n\\end{tiny}/12/0"); | |
| return; | |
| } | |
| if (text=="scriptsize") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\scriptsize /}/13/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{scriptsize}\n/\n\\end{scriptsize}/18/0"); | |
| return; | |
| } | |
| if (text=="footnotesize") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\footnotesize /}/15/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{footnotesize}\n/\n\\end{footnotesize}/20/0"); | |
| return; | |
| } | |
| if (text=="small") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\small /}/8/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{small}\n/\n\\end{small}/13/0"); | |
| return; | |
| } | |
| if (text=="normalsize") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\normalsize /}/13/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{normalsize}\n/\n\\end{normalsize}/18/0"); | |
| return; | |
| } | |
| if (text=="large") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\large /}/8/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{large}\n/\n\\end{large}/13/0"); | |
| return; | |
| } | |
| if (text=="Large") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\Large /}/8/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{Large}\n/\n\\end{Large}/13/0"); | |
| return; | |
| } | |
| if (text=="LARGE") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\LARGE /}/8/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{LARGE}\n/\n\\end{LARGE}/13/0"); | |
| return; | |
| } | |
| if (text=="huge") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\huge /}/7/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{huge}\n/\n\\end{huge}/12/0"); | |
| return; | |
| } | |
| if (text=="Huge") | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection() && !currentEditorView()->editor->textCursor().selectedText().contains(QString(0x2029))) | |
| { | |
| InsertWithSelectionFromString("{\\Huge /}/7/0"); | |
| } | |
| else InsertWithSelectionFromString("\\begin{Huge}\n/\n\\end{Huge}/12/0"); | |
| return; | |
| } | |
| } | |
| void Texmaker::ShowSectionMenu() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| sectionMenu->exec(centralToolBar->widgetForAction(action)->mapToGlobal(QPoint(centralToolBar->width(),0))); | |
| } | |
| void Texmaker::ShowRefMenu() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| refMenu->exec(centralToolBar->widgetForAction(action)->mapToGlobal(QPoint(centralToolBar->width(),0))); | |
| } | |
| void Texmaker::ShowSizeMenu() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| sizeMenu->exec(centralToolBar->widgetForAction(action)->mapToGlobal(QPoint(centralToolBar->width(),0))); | |
| } | |
| ///////////////TOOLS//////////////////// | |
| void Texmaker::RunCommand(QString comd,bool waitendprocess) | |
| { | |
| QString finame; | |
| QString commandline=comd; | |
| QByteArray result; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) || finame=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Can't detect the file name")); | |
| return; | |
| } | |
| if (finame.startsWith("untitled")) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("A document must be saved with an extension (and without spaces or accents in the name) before being used by a command.")); | |
| return; | |
| } | |
| if (!currentfileSaved()) | |
| { | |
| ERRPROCESS=true; | |
| return; | |
| } | |
| // QFileInfo texfi(finame); | |
| // QString suf="."+texfi.suffix(); | |
| // QString realname; | |
| if ((comd.startsWith("latex") || comd.startsWith("pdflatex")) && useoutputdir) | |
| { | |
| commandline.replace("latex","latex --output-directory=build"); | |
| createBuildSubdirectory(finame); | |
| // realname=finame; | |
| } | |
| // else | |
| // { | |
| // realname=outputName(finame,suf); | |
| // } | |
| // | |
| // qDebug() << realname; | |
| QFileInfo fi(finame); | |
| QString basename=fi.completeBaseName(); | |
| //commandline.replace("%","\""+basename+"\""); | |
| //commandline.replace("!",fi.absolutePath()); | |
| QFileInfo ficur(getName()); | |
| //if (!commandline.contains("okular")) commandline.replace("#","\""+ficur.completeBaseName()+"\""); | |
| int currentline=1; | |
| if (currentEditorView() ) | |
| { | |
| currentline=currentEditorView()->editor->linefromblock(currentEditorView()->editor->textCursor().block()); | |
| } | |
| //commandline.replace("@",QString::number(currentline)); | |
| QRegExp rx1("(#+)"); | |
| QString capt=""; | |
| if (rx1.indexIn(commandline) != -1) capt=rx1.cap(1); | |
| if (capt=="#") commandline.replace("#","\""+ficur.completeBaseName()+"\""); | |
| else if (capt=="##") commandline.replace("##","#"); | |
| QRegExp rx2("(%+)"); | |
| capt=""; | |
| if (rx2.indexIn(commandline) != -1) capt=rx2.cap(1); | |
| if (capt=="%") commandline.replace("%","\""+basename+"\""); | |
| else if (capt=="%%") commandline.replace("%%","%"); | |
| QRegExp rx3("(!+)"); | |
| capt=""; | |
| if (rx3.indexIn(commandline) != -1) capt=rx3.cap(1); | |
| if (capt=="!") commandline.replace("!",fi.absolutePath()); | |
| else if (capt=="!!") commandline.replace("!!","!"); | |
| QRegExp rx4("(@+)"); | |
| capt=""; | |
| if (rx4.indexIn(commandline) != -1) capt=rx4.cap(1); | |
| if (capt=="@") commandline.replace("@",QString::number(currentline)); | |
| else if (capt=="@@") commandline.replace("@@","@"); | |
| if (builtinpdfview && (comd==viewpdf_command)) | |
| { | |
| if (embedinternalpdf) | |
| { | |
| if (pdfviewerWidget) | |
| { | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| showpdfview=true; | |
| ShowPdfView(false); | |
| pdfviewerWidget->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1")) ) pdfviewerWidget->jumpToPdfFromSource(getName(),currentline); | |
| } | |
| else | |
| { | |
| // pdfviewerWidget=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWidget=new PdfViewerWidget(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,StackedViewers); | |
| pdfviewerWidget->centralToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| pdfviewerWidget->centralToolBarBis->setMaximumHeight(centralToolBarBis->height()); | |
| connect(pdfviewerWidget, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWidget, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWidget, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| StackedViewers->addWidget(pdfviewerWidget); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1")) ) pdfviewerWidget->jumpToPdfFromSource(getName(),currentline); | |
| } | |
| return; | |
| } | |
| else | |
| { | |
| if (pdfviewerWindow) | |
| { | |
| pdfviewerWindow->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| pdfviewerWindow->raise(); | |
| pdfviewerWindow->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWindow->jumpToPdfFromSource(getName(),currentline); | |
| } | |
| else | |
| { | |
| // pdfviewerWindow=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWindow=new PdfViewer(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,0); | |
| connect(pdfviewerWindow, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWindow, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWindow, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| pdfviewerWindow->raise(); | |
| pdfviewerWindow->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWindow->jumpToPdfFromSource(getName(),currentline); | |
| } | |
| return; | |
| } | |
| } | |
| else if (comd==asymptote_command) | |
| { | |
| QDir currentdir(fi.absolutePath()); | |
| foreach (QFileInfo asyFileInfo, currentdir.entryInfoList(QStringList(basename+"*.asy"),QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) | |
| { | |
| QString asyName = asyFileInfo.absolutePath()+"/"+asyFileInfo.completeBaseName(); | |
| AsyFile(asyName); | |
| } | |
| return; | |
| } | |
| proc = new QProcess( this ); | |
| proc->setWorkingDirectory(fi.absolutePath()); | |
| proc->setProperty("command",commandline); | |
| //**** | |
| #if defined(Q_OS_MAC) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (extra_path.isEmpty()) env.insert("PATH", env.value("PATH") + ":/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/sw/bin"); | |
| else | |
| env.insert("PATH", env.value("PATH") + ":/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/sw/bin:"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (!extra_path.isEmpty()) | |
| { | |
| env.insert("PATH", env.value("PATH") + ";"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| } | |
| #endif | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (!extra_path.isEmpty()) | |
| { | |
| env.insert("PATH", env.value("PATH") + ":"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| } | |
| #endif | |
| //**** | |
| connect(proc, SIGNAL(readyReadStandardError()),this, SLOT(readFromStderr())); | |
| if ((comd==asymptote_command) || (comd==bibtex_command) ) connect(proc, SIGNAL(readyReadStandardOutput()),this, SLOT(readFromStdoutput())); | |
| if (checkViewerInstance && ((comd==viewdvi_command) || (comd==viewps_command) || (comd==viewpdf_command))) | |
| { | |
| connect(proc, SIGNAL(finished(int)),this, SLOT(SlotEndViewerProcess(int))); | |
| if (singleviewerinstance) | |
| { | |
| if (listViewerCommands.contains(commandline)) return; | |
| else listViewerCommands.append(commandline); | |
| } | |
| else | |
| { | |
| listViewerCommands.clear(); | |
| } | |
| } | |
| else | |
| { | |
| if (((comd!=viewdvi_command) && (comd!=viewps_command) && (comd!=viewpdf_command))) disableToolsActions(); | |
| connect(proc, SIGNAL(finished(int)),this, SLOT(SlotEndProcess(int))); | |
| } | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| //OutputTextEdit->insertLine(commandline+"\n"); | |
| proc->start(commandline); | |
| if (!proc->waitForStarted(1000)) | |
| { | |
| ERRPROCESS=true; | |
| OutputTextEdit->insertLine("Error : could not start the command\n"); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| else OutputTextEdit->insertLine("Process started\n"); | |
| stat2->setText(commandline.section(' ',0,0)); | |
| FINPROCESS=false; | |
| STOPPROCESS=false; | |
| if (waitendprocess) | |
| { | |
| StopAct->setEnabled(true); | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| while (!FINPROCESS) | |
| { | |
| qApp->instance()->processEvents(QEventLoop::AllEvents); | |
| if (STOPPROCESS && proc && proc->state()==QProcess::Running) | |
| { | |
| proc->kill(); | |
| FINPROCESS=true; | |
| ERRPROCESS=true; | |
| stat2->setText("Ready"); | |
| } | |
| } | |
| QApplication::restoreOverrideCursor(); | |
| enableToolsActions(); | |
| StopAct->setEnabled(false); | |
| } | |
| } | |
| void Texmaker::readFromStderr() | |
| { | |
| QByteArray result=proc->readAllStandardError(); | |
| QString t=QString(result); | |
| t=t.simplified(); | |
| if (!t.isEmpty()) OutputTextEdit->insertLine(t+"\n"); | |
| } | |
| void Texmaker::stopProcess() | |
| { | |
| STOPPROCESS=true; | |
| } | |
| void Texmaker::readFromStdoutput() | |
| { | |
| QByteArray result=proc->readAllStandardOutput (); | |
| QString t=QString(result); | |
| t=t.simplified(); | |
| if (!t.isEmpty()) OutputTextEdit->insertLine(t+"\n"); | |
| } | |
| void Texmaker::SlotEndProcess(int err) | |
| { | |
| FINPROCESS=true; | |
| enableToolsActions(); | |
| QString result=((err) ? "Process exited with error(s)" : "Process exited normally"); | |
| if (err) {ERRPROCESS=true;checkViewerInstance=false;} | |
| OutputTextEdit->insertLine(result); | |
| stat2->setText("Ready"); | |
| //stat2->setText(QString(" %1 ").arg(tr("Ready"))); | |
| } | |
| void Texmaker::SlotEndViewerProcess(int err) | |
| { | |
| QString commandline = static_cast<QProcess*>(sender())->property("command").toString(); | |
| if ((singleviewerinstance) && (listViewerCommands.contains(commandline))) listViewerCommands.removeAll(commandline); | |
| FINPROCESS=true; | |
| enableToolsActions(); | |
| QString result=((err) ? "Process exited with error(s)" : "Process exited normally"); | |
| if (err) {ERRPROCESS=true;checkViewerInstance=false;} | |
| OutputTextEdit->insertLine(result); | |
| //stat2->setText(QString(" %1 ").arg(tr("Ready"))); | |
| } | |
| void Texmaker::QuickBuild() | |
| { | |
| //stat2->setText(QString(" %1 ").arg(tr("Quick Build"))); | |
| ERRPROCESS=false; | |
| checkViewerInstance=true; | |
| QString finame=getName(); | |
| QFileInfo fi(finame); | |
| if (!finame.startsWith("untitled") && finame!="" && fi.suffix()=="asy") | |
| { | |
| QStringList asyCommandList=quick_asy_command.split("|"); | |
| for (int i = 0; i < asyCommandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!asyCommandList.at(i).isEmpty())) | |
| { | |
| RunCommand(asyCommandList.at(i),true); | |
| if ((asyCommandList.at(i)==latex_command) || (asyCommandList.at(i)==pdflatex_command) || (asyCommandList.at(i)==xelatex_command) || (asyCommandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else {checkViewerInstance=false;return;} | |
| } | |
| } | |
| else | |
| { | |
| switch (quickmode) | |
| { | |
| case 1: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| if (!ERRPROCESS) RunCommand(dvips_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) ViewPS(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 2: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewDvi(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 3: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 4: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvi to Pdf")); | |
| if (!ERRPROCESS) RunCommand(dvipdf_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 5: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| if (!ERRPROCESS) RunCommand(dvips_command,true); | |
| else {checkViewerInstance=false;return;} | |
| //stat2->setText(QString(" %1 ").arg("Ps to Pdf")); | |
| if (!ERRPROCESS) RunCommand(ps2pdf_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) ViewPDF(); | |
| } | |
| else {NextError();} | |
| }break; | |
| case 6: | |
| { | |
| QStringList commandList=userquick_command.split("|"); | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else {checkViewerInstance=false;return;} | |
| } | |
| }break; | |
| case 7: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Asymptote")); | |
| if (!ERRPROCESS) RunCommand(asymptote_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| if (!ERRPROCESS) RunCommand(dvips_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) ViewPS(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| } | |
| else {NextError();} | |
| } | |
| else return; | |
| // if (!ERRPROCESS) | |
| // { | |
| // //stat2->setText(QString(" %1 ").arg("Latex")); | |
| // RunCommand(latex_command,true); | |
| // if (ERRPROCESS && !LogExists()) | |
| // { | |
| // QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| // checkViewerInstance=false; | |
| // return; | |
| // } | |
| // LoadLog(); | |
| // if (showoutputview) ViewLog(); | |
| // if (NoLatexErrors()) | |
| // { | |
| // //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| // if (!ERRPROCESS) RunCommand(dvips_command,true); | |
| // else {checkViewerInstance=false;return;} | |
| // if (!ERRPROCESS) ViewPS(); | |
| // else {checkViewerInstance=false;return;} | |
| // } | |
| // else {NextError();} | |
| // } | |
| // else return; | |
| } | |
| else {NextError();} | |
| }break; | |
| case 8: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Asymptote")); | |
| if (!ERRPROCESS) RunCommand(asymptote_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| } | |
| else {NextError();} | |
| } | |
| else return; | |
| // if (!ERRPROCESS) | |
| // { | |
| // //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| // RunCommand(pdflatex_command,true); | |
| // if (ERRPROCESS && !LogExists()) | |
| // { | |
| // QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| // checkViewerInstance=false; | |
| // return; | |
| // } | |
| // LoadLog(); | |
| // if (showoutputview) ViewLog(); | |
| // if (NoLatexErrors()) | |
| // { | |
| // if (!ERRPROCESS) ViewPDF(); | |
| // else {checkViewerInstance=false;return;} | |
| // } | |
| // else {NextError();} | |
| // } | |
| // else return; | |
| } | |
| else {NextError();} | |
| }break; | |
| case 9: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("LatexMk")); | |
| RunCommand(latexmk_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 10: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(xelatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 11: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(lualatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| case 12: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Asymptote")); | |
| if (!ERRPROCESS) RunCommand(bibtex_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| } | |
| else {NextError();} | |
| } | |
| else return; | |
| } | |
| else {NextError();} | |
| }break; | |
| case 13: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Asymptote")); | |
| if (!ERRPROCESS) RunCommand(bibtex_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| RunCommand(latex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| if (!ERRPROCESS) RunCommand(dvips_command,true); | |
| else {checkViewerInstance=false;return;} | |
| //stat2->setText(QString(" %1 ").arg("Ps to Pdf")); | |
| if (!ERRPROCESS) RunCommand(ps2pdf_command,true); | |
| else {checkViewerInstance=false;return;} | |
| if (!ERRPROCESS) ViewPDF(); | |
| } | |
| else {NextError();} | |
| } | |
| else {NextError();} | |
| } | |
| else return; | |
| } | |
| else {NextError();} | |
| }break; | |
| case 14: | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(sweave_command,true); | |
| if (!ERRPROCESS) RunCommand(pdflatex_command,true); | |
| if (ERRPROCESS && !LogExists()) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (NoLatexErrors()) | |
| { | |
| if (!ERRPROCESS) ViewPDF(); | |
| else {checkViewerInstance=false;return;} | |
| } | |
| else {NextError();} | |
| }break; | |
| } | |
| if (NoLatexErrors() && showoutputview) ViewLog(); | |
| } | |
| checkViewerInstance=false; | |
| } | |
| void Texmaker::Latex() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Latex")); | |
| RunCommand(latex_command,true); | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| void Texmaker::ViewDvi() | |
| { | |
| //stat2->setText(QString(" %1 ").arg(tr("View Dvi file"))); | |
| RunCommand(viewdvi_command,false); | |
| } | |
| void Texmaker::DviToPS() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvips")); | |
| RunCommand(dvips_command,false); | |
| } | |
| void Texmaker::ViewPS() | |
| { | |
| //stat2->setText(QString(" %1 ").arg(tr("View PS file"))); | |
| RunCommand(viewps_command,false); | |
| } | |
| void Texmaker::PDFLatex() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(pdflatex_command,true); | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| void Texmaker::ViewPDF() | |
| { | |
| //stat2->setText(QString(" %1 ").arg(tr("View Pdf file"))); | |
| RunCommand(viewpdf_command,false); | |
| } | |
| void Texmaker::MakeBib() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Bibtex")); | |
| RunCommand(bibtex_command,false); | |
| } | |
| void Texmaker::MakeIndex() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Make index")); | |
| RunCommand(makeindex_command,false); | |
| } | |
| void Texmaker::PStoPDF() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Ps -> Pdf")); | |
| RunCommand(ps2pdf_command,false); | |
| } | |
| void Texmaker::DVItoPDF() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Dvi -> Pdf")); | |
| RunCommand(dvipdf_command,false); | |
| } | |
| void Texmaker::MetaPost() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Mpost")); | |
| QString finame=getName(); | |
| QFileInfo fi(finame); | |
| RunCommand(metapost_command+fi.completeBaseName()+"."+fi.suffix(),false); | |
| } | |
| void Texmaker::CleanAll() | |
| { | |
| QString finame,f; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) || finame.startsWith("untitled") || finame=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Can't detect the file name")); | |
| return; | |
| } | |
| fileSave(); | |
| QStringList extension=QString(".log,.aux,.dvi,.lof,.lot,.bit,.idx,.glo,.bbl,.ilg,.toc,.ind,.out,.synctex.gz,.blg,.thm,.pre,.nlg,.nlo,.nls,.bcf,.snm,.nav,.run.xml").split(","); | |
| if (useoutputdir) | |
| { | |
| QFileInfo fi(outputName(finame,".pdf")); | |
| if(QMessageBox::warning(this, "Texmaker", tr("Make a copy of the %1.pdf/ps document in the \"build\" subdirectory and delete all the others %1.* files?").arg(fi.baseName()),tr("Ok"), tr("Cancel") )==0) | |
| { | |
| QDirIterator iterator(QDir(fi.absolutePath()),QDirIterator::NoIteratorFlags); | |
| while(iterator.hasNext()) | |
| { | |
| QString entry(iterator.next()); | |
| if (QFileInfo(entry).suffix().toLower()=="pdf" && QFileInfo(entry).baseName()==fi.baseName()) | |
| { | |
| copyFile(entry,QFileInfo(finame).absolutePath()+"/"+QFileInfo(entry).completeBaseName()+".pdf"); | |
| } | |
| else if (QFileInfo(entry).suffix().toLower()=="ps" && QFileInfo(entry).baseName()==fi.baseName()) | |
| { | |
| copyFile(entry,QFileInfo(finame).absolutePath()+"/"+QFileInfo(entry).completeBaseName()+".ps"); | |
| } | |
| else if(!QFileInfo(entry).isDir() && QFileInfo(entry).baseName()==fi.baseName()) | |
| { | |
| if (QFile::exists(entry)) | |
| { | |
| QFile file(entry); | |
| file.open( QIODevice::ReadOnly ); | |
| file.remove(); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| else | |
| { | |
| QFileInfo fi(finame); | |
| if (QMessageBox::warning(this, "Texmaker", tr("Delete the output files generated by LaTeX ?"),tr("Delete Files"), tr("Cancel") )==0) | |
| { | |
| QDirIterator iterator(QDir(fi.absolutePath()),QDirIterator::NoIteratorFlags); | |
| while(iterator.hasNext()) | |
| { | |
| QString entry(iterator.next()); | |
| if(!QFileInfo(entry).isDir()) | |
| { | |
| if(extension.contains("."+QFileInfo(entry).completeSuffix().toLower()) && QFileInfo(entry).baseName()==fi.baseName()) | |
| { | |
| if (QFile::exists(entry)) | |
| { | |
| QFile file(entry); | |
| file.open( QIODevice::ReadOnly ); | |
| file.remove(); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::Asymptote() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Asymptote")); | |
| RunCommand(asymptote_command,false); | |
| } | |
| void Texmaker::AsyFile(QString asyfile) | |
| { | |
| QString commandline=asymptote_command; | |
| QFileInfo fi(asyfile); | |
| commandline.replace("%","\""+asyfile+"\""); | |
| proc = new QProcess( this ); | |
| proc->setWorkingDirectory(fi.absolutePath()); | |
| proc->setProperty("command",commandline); | |
| //**** | |
| #if defined(Q_OS_MAC) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (extra_path.isEmpty()) env.insert("PATH", env.value("PATH") + ":/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/sw/bin"); | |
| else | |
| env.insert("PATH", env.value("PATH") + ":/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/sw/bin:"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (!extra_path.isEmpty()) | |
| { | |
| env.insert("PATH", env.value("PATH") + ";"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| } | |
| #endif | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); | |
| if (!extra_path.isEmpty()) | |
| { | |
| env.insert("PATH", env.value("PATH") + ":"+extra_path); | |
| proc->setProcessEnvironment(env); | |
| } | |
| #endif | |
| //**** | |
| connect(proc, SIGNAL(readyReadStandardError()),this, SLOT(readFromStderr())); | |
| //connect(proc, SIGNAL(readyReadStandardOutput()),this, SLOT(readFromStdoutput())); | |
| connect(proc, SIGNAL(finished(int)),this, SLOT(SlotEndProcess(int))); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| //OutputTextEdit->insertLine(commandline+"\n"); | |
| proc->start(commandline); | |
| if (!proc->waitForStarted(1000)) | |
| { | |
| ERRPROCESS=true; | |
| OutputTextEdit->insertLine("Error : could not start the command\n"); | |
| checkViewerInstance=false; | |
| return; | |
| } | |
| else OutputTextEdit->insertLine("Process started\n"); | |
| FINPROCESS=false; | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| while (!FINPROCESS) | |
| { | |
| qApp->instance()->processEvents(QEventLoop::ExcludeUserInputEvents); | |
| } | |
| QApplication::restoreOverrideCursor(); | |
| } | |
| void Texmaker::LatexMk() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("LatexMk")); | |
| RunCommand(latexmk_command,true); | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| void Texmaker::Sweave() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("LatexMk")); | |
| RunCommand(sweave_command,false); | |
| } | |
| void Texmaker::Xelatex() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(xelatex_command,true); | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| void Texmaker::Lualatex() | |
| { | |
| //stat2->setText(QString(" %1 ").arg("Pdf Latex")); | |
| RunCommand(lualatex_command,true); | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| void Texmaker::UserTool1() | |
| { | |
| QStringList commandList=UserToolCommand[0].split("|"); | |
| ERRPROCESS=false; | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else return; | |
| } | |
| } | |
| void Texmaker::UserTool2() | |
| { | |
| QStringList commandList=UserToolCommand[1].split("|"); | |
| ERRPROCESS=false; | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else return; | |
| } | |
| } | |
| void Texmaker::UserTool3() | |
| { | |
| QStringList commandList=UserToolCommand[2].split("|"); | |
| ERRPROCESS=false; | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else return; | |
| } | |
| } | |
| void Texmaker::UserTool4() | |
| { | |
| QStringList commandList=UserToolCommand[3].split("|"); | |
| ERRPROCESS=false; | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else return; | |
| } | |
| } | |
| void Texmaker::UserTool5() | |
| { | |
| QStringList commandList=UserToolCommand[4].split("|"); | |
| ERRPROCESS=false; | |
| for (int i = 0; i < commandList.size(); ++i) | |
| { | |
| if ((!ERRPROCESS)&&(!commandList.at(i).isEmpty())) | |
| { | |
| RunCommand(commandList.at(i),true); | |
| if ((commandList.at(i)==latex_command) || (commandList.at(i)==pdflatex_command) || (commandList.at(i)==xelatex_command) || (commandList.at(i)==lualatex_command)) | |
| { | |
| LoadLog(); | |
| if (showoutputview) ViewLog(); | |
| if (!NoLatexErrors()) NextError(); | |
| } | |
| } | |
| else return; | |
| } | |
| } | |
| void Texmaker::OpenTerminal() | |
| { | |
| QProcess process; | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) || finame.startsWith("untitled") || finame=="") | |
| { | |
| finame=QDir::homePath(); | |
| } | |
| QFileInfo fi(finame); | |
| const QString pwd = QDir::toNativeSeparators(fi.isDir() ? | |
| fi.absoluteFilePath() : | |
| fi.absolutePath()); | |
| process.setWorkingDirectory(pwd); | |
| #if defined(Q_OS_WIN32) | |
| const QString terminalEmulator = QString::fromLocal8Bit(qgetenv("COMSPEC")); | |
| process.startDetached(terminalEmulator,QStringList()<< "/k" << "cd" << pwd); | |
| #elif defined(Q_OS_MAC) | |
| const QString terminalEmulator = QCoreApplication::applicationDirPath() + "/../Resources/openTerminal.command"; | |
| process.startDetached(terminalEmulator,QStringList()<< pwd); | |
| #else | |
| const QString shell = QString::fromLocal8Bit(qgetenv("SHELL")); | |
| if (!process.startDetached("konsole --workdir \""+pwd+"\"")) | |
| { | |
| if (!process.startDetached("gnome-terminal --working-directory=\""+pwd+"\"")) process.startDetached("xterm -lc -u8 -e \"cd \'"+pwd+"\' && "+shell+"\""); | |
| } | |
| #endif | |
| } | |
| void Texmaker::Export() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) || finame.startsWith("untitled") || finame=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Can't detect the file name")); | |
| return; | |
| } | |
| ExportDialog *exportDlg = new ExportDialog(this,finame); | |
| exportDlg->ui.lineEditPath->setText(htlatex_command); | |
| exportDlg->ui.lineEditOptions->setText(htlatex_options); | |
| if (exportDlg->exec()) | |
| { | |
| htlatex_command=exportDlg->ui.lineEditPath->text(); | |
| htlatex_options=exportDlg->ui.lineEditOptions->text(); | |
| } | |
| } | |
| void Texmaker::ConvertToUnicode() | |
| { | |
| UnicodeDialog *uniDlg = new UnicodeDialog(this); | |
| uniDlg->init(EditorFont,showline,edcolors(),hicolors()); | |
| uniDlg->exec(); | |
| } | |
| void Texmaker::EditUserTool() | |
| { | |
| QStringList usualNames, usualCommands; | |
| usualNames << tr("LaTeX") << tr("PdfLaTeX") << tr("dvips") << tr("Dvi Viewer") << tr("PS Viewer") << tr("Dvipdfm") << tr("ps2pdf") << tr("Bibtex") << tr("Makeindex") << tr("Pdf Viewer") << tr("metapost") << tr("ghostscript") << tr("Asymptote") << tr("Latexmk") << tr("R Sweave") << tr("XeLaTex") << tr("LuaLaTex"); | |
| usualCommands << latex_command << pdflatex_command << dvips_command << viewdvi_command << viewps_command << dvipdf_command << ps2pdf_command << bibtex_command << makeindex_command<< viewpdf_command << metapost_command << ghostscript_command << asymptote_command << latexmk_command << sweave_command << xelatex_command << lualatex_command; | |
| QAction *Act; | |
| UserToolDialog *utDlg = new UserToolDialog(this,tr("Edit User &Commands"),usualNames, usualCommands); | |
| for ( int i = 0; i <= 4; i++ ) | |
| { | |
| utDlg->Name[i]=UserToolName[i]; | |
| utDlg->Tool[i]=UserToolCommand[i]; | |
| } | |
| utDlg->init(); | |
| if ( utDlg->exec() ) | |
| { | |
| for ( int i = 0; i <= 4; i++ ) | |
| { | |
| UserToolName[i]=utDlg->Name[i]; | |
| UserToolCommand[i]=utDlg->Tool[i]; | |
| } | |
| user12Menu->clear(); | |
| Act = new QAction("1: "+UserToolName[0], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F1); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool1())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("2: "+UserToolName[1], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F2); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool2())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("3: "+UserToolName[2], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F3); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool3())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("4: "+UserToolName[3], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F4); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool4())); | |
| user12Menu->addAction(Act); | |
| Act = new QAction("5: "+UserToolName[4], this); | |
| Act->setShortcut(Qt::SHIFT+Qt::ALT+Qt::Key_F5); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(UserTool5())); | |
| user12Menu->addAction(Act); | |
| user12Menu->addSeparator(); | |
| Act = new QAction(tr("Edit User &Commands"), this); | |
| connect(Act, SIGNAL(triggered()), this, SLOT(EditUserTool())); | |
| user12Menu->addAction(Act); | |
| QStringList list; | |
| list.append(tr("Quick Build")); | |
| list.append("LaTeX"); | |
| list.append("Dvi->PS"); | |
| list.append("PDFLaTeX"); | |
| list.append("BibTeX"); | |
| list.append("MakeIndex"); | |
| list.append("MPost"); | |
| list.append("PS->PDF"); | |
| list.append("DVI->PDF"); | |
| list.append("Asymptote"); | |
| list.append("LatexMk"); | |
| list.append("R Sweave"); | |
| list.append("XeLaTeX"); | |
| list.append("LuaLaTeX"); | |
| int runIndex=comboCompil->currentIndex(); | |
| for ( int i = 0; i <= 4; i++ ) comboCompil->setItemText(14+i,QString::number(i+1)+": "+UserToolName[i]); | |
| comboCompil->setCurrentIndex(runIndex); | |
| } | |
| } | |
| void Texmaker::doCompile() | |
| { | |
| switch (comboCompil->currentIndex()) | |
| { | |
| case 0: | |
| { | |
| QuickBuild(); | |
| }break; | |
| case 1: | |
| { | |
| Latex(); | |
| }break; | |
| case 2: | |
| { | |
| DviToPS(); | |
| }break; | |
| case 3: | |
| { | |
| PDFLatex(); | |
| }break; | |
| case 4: | |
| { | |
| MakeBib(); | |
| }break; | |
| case 5: | |
| { | |
| MakeIndex(); | |
| }break; | |
| case 6: | |
| { | |
| MetaPost(); | |
| }break; | |
| case 7: | |
| { | |
| PStoPDF(); | |
| }break; | |
| case 8: | |
| { | |
| DVItoPDF(); | |
| }break; | |
| case 9: | |
| { | |
| Asymptote(); | |
| }break; | |
| case 10: | |
| { | |
| LatexMk(); | |
| }break; | |
| case 11: | |
| { | |
| Sweave(); | |
| }break; | |
| case 12: | |
| { | |
| Xelatex(); | |
| }break; | |
| case 13: | |
| { | |
| Lualatex(); | |
| }break; | |
| case 14: | |
| { | |
| UserTool1(); | |
| }break; | |
| case 15: | |
| { | |
| UserTool2(); | |
| }break; | |
| case 16: | |
| { | |
| UserTool3(); | |
| }break; | |
| case 17: | |
| { | |
| UserTool4(); | |
| }break; | |
| case 18: | |
| { | |
| UserTool5(); | |
| }break; | |
| } | |
| } | |
| void Texmaker::doView() | |
| { | |
| switch (comboView->currentIndex()) | |
| { | |
| case 0: | |
| { | |
| ViewDvi(); | |
| }break; | |
| case 1: | |
| { | |
| ViewPS(); | |
| }break; | |
| case 2: | |
| { | |
| ViewPDF(); | |
| }break; | |
| } | |
| } | |
| void Texmaker::jumpToPdfline(int line) | |
| { | |
| if (!builtinpdfview) return; | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) || finame.startsWith("untitled") || finame=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Can't detect the file name")); | |
| return; | |
| } | |
| fileSave(); | |
| QFileInfo fi(finame); | |
| if (!fi.exists()) return; | |
| QString basename=fi.completeBaseName(); | |
| if (embedinternalpdf) | |
| { | |
| if (pdfviewerWidget) | |
| { | |
| if (pdfviewerWidget->pdf_file!=outputName(finame,".pdf")) pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWidget->jumpToPdfFromSource(getName(),line); | |
| pdfviewerWidget->getFocus(); | |
| } | |
| else | |
| { | |
| // pdfviewerWidget=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWidget=new PdfViewerWidget(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,StackedViewers); | |
| pdfviewerWidget->centralToolBarBis->setMinimumHeight(centralToolBarBis->height()); | |
| pdfviewerWidget->centralToolBarBis->setMaximumHeight(centralToolBarBis->height()); | |
| connect(pdfviewerWidget, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWidget, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWidget, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| StackedViewers->addWidget(pdfviewerWidget); | |
| StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| //pdfviewerWidget->raise(); | |
| pdfviewerWidget->show(); | |
| pdfviewerWidget->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWidget->jumpToPdfFromSource(getName(),line); | |
| pdfviewerWidget->getFocus(); | |
| } | |
| } | |
| else | |
| { | |
| if (pdfviewerWindow) | |
| { | |
| if (pdfviewerWindow->pdf_file!=outputName(finame,".pdf")) pdfviewerWindow->openFile(outputName(finame,".pdf"),viewpdf_command,ghostscript_command); | |
| pdfviewerWindow->raise(); | |
| pdfviewerWindow->show(); | |
| qApp->setActiveWindow(pdfviewerWindow); | |
| pdfviewerWindow->setFocus(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1")) ) pdfviewerWindow->jumpToPdfFromSource(getName(),line); | |
| } | |
| else | |
| { | |
| // pdfviewerWindow=new PdfViewer(outputName(finame,".pdf"),viewpdf_command, this); | |
| pdfviewerWindow=new PdfViewer(outputName(finame,".pdf"),viewpdf_command,ghostscript_command,lp_options,QKeySequence(keyToggleFocus),pdfCheckerLang,lastScale,0); | |
| connect(pdfviewerWindow, SIGNAL(openDocAtLine(const QString&, int, bool)), this, SLOT(fileOpenAndGoto(const QString&, int, bool))); | |
| connect(pdfviewerWindow, SIGNAL(sendFocusToEditor()), this, SLOT(getFocusToEditor())); | |
| connect(pdfviewerWindow, SIGNAL(sendPaperSize(const QString&)), this, SLOT(setPrintPaperSize(const QString&))); | |
| pdfviewerWindow->raise(); | |
| pdfviewerWindow->show(); | |
| if ( (pdflatex_command.contains("synctex=1")) || (latex_command.contains("synctex=1")) || (xelatex_command.contains("synctex=1"))) pdfviewerWindow->jumpToPdfFromSource(getName(),line); | |
| } | |
| } | |
| } | |
| //////////////// MESSAGES - LOG FILE/////////////////////// | |
| bool Texmaker::LogExists() | |
| { | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) ||finame.startsWith("untitled") || finame=="") | |
| { | |
| return false; | |
| } | |
| QString logname=outputName(finame,".log"); | |
| // QFileInfo fi(finame); | |
| // QString name=fi.absoluteFilePath(); | |
| // QString ext=fi.suffix(); | |
| // QString basename=name.left(name.length()-ext.length()-1); | |
| // QString logname=basename+".log"; | |
| QFileInfo fic(logname); | |
| if (fic.exists() && fic.isReadable()) return true; | |
| else return false; | |
| } | |
| void Texmaker::LoadLog() | |
| { | |
| OutputTextEdit->clear(); | |
| logpresent=false; | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| if ((singlemode && !currentEditorView()) ||finame.startsWith("untitled") || finame=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| ERRPROCESS=true; | |
| return; | |
| } | |
| QString logname=outputName(finame,".log"); | |
| // QFileInfo fi(finame); | |
| // QString name=fi.absoluteFilePath(); | |
| // QString ext=fi.suffix(); | |
| // QString basename=name.left(name.length()-ext.length()-1); | |
| // QString logname=basename+".log"; | |
| QString line; | |
| QFileInfo fic(logname); | |
| QTextCodec* codec = QTextCodec::codecForName(input_encoding.toLatin1()); | |
| if(!codec) codec = QTextCodec::codecForLocale(); | |
| if (fic.exists() && fic.isReadable() ) | |
| { | |
| OutputTextEdit->insertLine("LOG FILE :"); | |
| QFile f(logname); | |
| if ( f.open(QIODevice::ReadOnly) ) | |
| { | |
| QTextStream t( &f ); | |
| t.setCodec(codec); | |
| // OutputTextEdit->setPlainText( t.readAll() ); | |
| while ( !t.atEnd() ) | |
| { | |
| line=t.readLine(); | |
| line=line.simplified(); | |
| if (!line.isEmpty()) OutputTextEdit->insertLine(line); | |
| } | |
| } | |
| f.close(); | |
| LatexError(); | |
| logpresent=true; | |
| } | |
| else {QMessageBox::warning( this,tr("Error"),tr("Log File not found !"));} | |
| } | |
| void Texmaker::ViewLog() | |
| { | |
| LoadLog(); | |
| if (!showoutputview) ShowOutputView(true); | |
| } | |
| void Texmaker::ClickedOnOutput(int l) | |
| { | |
| if ( !currentEditorView() ) return; | |
| currentEditorView()->editor->gotoLine(l); | |
| } | |
| void Texmaker::ClickedOnLogLine(QTableWidgetItem *item) | |
| { | |
| if ( !currentEditorView() ) return; | |
| if ( !item ) return; | |
| QString content=item->text(); | |
| int row=OutputTableWidget->row(item); | |
| int col=OutputTableWidget->column(item); | |
| if (col!=3) content=OutputTableWidget->item(row,3)->text(); | |
| QString file=OutputTableWidget->item(row,1)->text(); | |
| int Start, End; | |
| bool ok; | |
| QString s; | |
| QString line=""; | |
| //// l. /// | |
| s = content; | |
| Start=End=0; | |
| Start=s.indexOf(QRegExp("l.[0-9]"), End); | |
| if (Start!=-1) | |
| { | |
| Start=Start+2; | |
| s=s.mid(Start,s.length()); | |
| if (End!=-1) | |
| line=s.mid(0,End); | |
| else | |
| line=s.mid(0,s.length()); | |
| }; | |
| //// line /// | |
| s = content; | |
| Start=End=0; | |
| Start=s.indexOf(QRegExp("line [0-9]"), End); | |
| if (Start!=-1) | |
| { | |
| Start=Start+5; | |
| s=s.mid(Start,s.length()); | |
| End=s.indexOf(QRegExp("[ a-zA-Z.\\-]"),0); | |
| if (End!=-1) | |
| line=s.mid(0,End); | |
| else | |
| line=s.mid(0,s.length()); | |
| }; | |
| //// lines /// | |
| s = content; | |
| Start=End=0; | |
| Start=s.indexOf(QRegExp("lines [0-9]"), End); | |
| if (Start!=-1) | |
| { | |
| Start=Start+6; | |
| s=s.mid(Start,s.length()); | |
| End=s.indexOf(QRegExp("[ a-zA-Z.\\-]"),0); | |
| if (End!=-1) | |
| line=s.mid(0,End); | |
| else | |
| line=s.mid(0,s.length()); | |
| }; | |
| int l=line.toInt(&ok,10)-1; | |
| if (ok) | |
| { | |
| if (file.isEmpty()) currentEditorView()->editor->gotoLine(l); | |
| else | |
| { | |
| QFileInfo fi(file); | |
| if (fi.exists() && fi.isReadable() ) fileOpenAndGoto(fi.absoluteFilePath(),l+1,true); | |
| else | |
| { | |
| QFileInfo fic(getName()); | |
| file=fic.absolutePath()+"/"+file; | |
| QFileInfo ffi(file); | |
| if (ffi.exists() && ffi.isReadable() ) fileOpenAndGoto(file,l+1,true); | |
| } | |
| } | |
| } | |
| QString ll=item->data(Qt::UserRole).toString(); | |
| int logline=ll.toInt(&ok,10)-1; | |
| OutputTextEdit->setCursorPosition(logline , 0); | |
| } | |
| ////////////////////////// ERRORS ///////////////////////////// | |
| void Texmaker::LatexError() | |
| { | |
| errorFileList.clear(); | |
| errorTypeList.clear(); | |
| errorLineList.clear(); | |
| errorMessageList.clear(); | |
| errorLogList.clear(); | |
| onlyErrorList.clear(); | |
| errorIndex=-1; | |
| QString mot,suivant,lettre,expression,warning,latexerror,badbox,name; | |
| QStringList pile,filestack; | |
| filestack.clear(); | |
| pile.clear(); | |
| int j; | |
| int ligne=0; | |
| int par=1; | |
| int errorpar=1; | |
| QRegExp rxWarning1("Warning: (.*) on.*line *(\\d+)"); | |
| QRegExp rxWarning2("Warning: (.*)"); | |
| QRegExp rxLatexError("(! )*(LaTeX Error:)* *(.*)\\.l\\.(\\d+) *(.*)"); | |
| QRegExp rxLineError("l\\.(\\d+)"); | |
| QRegExp rxBadBox("at (line|lines) ([0-9]+)"); | |
| QRegExp rxFile("(.*(\\.tex|\\.sty|\\.cls))"); | |
| QTextBlock tb = OutputTextEdit->document()->begin(); | |
| while (tb.isValid()) | |
| { | |
| errorpar=par; | |
| expression=tb.text(); | |
| j=0; | |
| pile.clear(); | |
| while (j<expression.length()) | |
| { | |
| lettre=expression.mid(j,1); | |
| if (lettre=="(" || lettre==")") | |
| { | |
| pile.prepend(lettre); | |
| j+=1; | |
| } | |
| else | |
| { | |
| mot=""; | |
| while (j<expression.length() && (expression.mid(j,1)!="(" && expression.mid(j,1)!=")")) | |
| { | |
| mot+=expression.mid(j,1); | |
| j+=1; | |
| } | |
| pile.prepend(mot); | |
| } | |
| } | |
| while (pile.count()>0) | |
| { | |
| mot=pile.last(); | |
| pile.removeLast(); | |
| if (mot=="(" && pile.count()>0) | |
| { | |
| suivant=pile.last(); | |
| pile.removeLast(); | |
| if (rxFile.indexIn(suivant) != -1) name=rxFile.cap(1); | |
| else name=""; | |
| if (name.startsWith("./")) name.remove("./"); | |
| filestack.append(name); | |
| } | |
| else if (mot==")" && filestack.count()>0) filestack.removeLast(); | |
| } | |
| if (expression.contains("Warning")) | |
| { | |
| warning=expression.trimmed(); | |
| while (tb.isValid() && !expression.contains(QRegExp("\\.$"))) | |
| { | |
| par++; | |
| tb=tb.next(); | |
| if (tb.isValid()) | |
| { | |
| expression=tb.text(); | |
| warning+=expression.trimmed(); | |
| } | |
| } | |
| if ( rxWarning1.indexIn(warning) != -1 ) | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Warning"); | |
| errorLineList.append(rxWarning1.cap(2)); | |
| errorMessageList.append(rxWarning1.cap(1).replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| else if ( rxWarning2.indexIn(warning) != -1 ) | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Warning"); | |
| errorLineList.append("1"); | |
| errorMessageList.append(rxWarning2.cap(1).replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| else | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Warning"); | |
| errorLineList.append("1"); | |
| errorMessageList.append(warning.replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| errorpar=par; | |
| } | |
| // else if (expression.contains(QRegExp("^!"))) | |
| else if (expression.contains(QRegExp("^! (.*)"))) | |
| { | |
| latexerror=expression.trimmed(); | |
| while (tb.isValid() && !expression.contains(rxLineError)) | |
| { | |
| par++; | |
| tb=tb.next(); | |
| if (tb.isValid()) | |
| { | |
| expression=tb.text(); | |
| latexerror+=expression.trimmed(); | |
| } | |
| } | |
| // if ( rxLatexError.indexIn(latexerror) != -1 ) | |
| // { | |
| // errorFileList.append(filestack.last()); | |
| // errorTypeList.append("Error"); | |
| // errorLineList.append(rxLatexError.cap(1)); | |
| // errorMessageList.append(rxLatexError.cap(3)+" :"+rxLatexError.cap(5)); | |
| // } | |
| if ( rxLineError.indexIn(latexerror) != -1 ) | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Error"); | |
| errorLineList.append(rxLineError.cap(1)); | |
| errorMessageList.append(latexerror.remove(rxLineError).replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| else | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Error"); | |
| errorLineList.append("1"); | |
| errorMessageList.append(latexerror.replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| errorpar=par; | |
| } | |
| else if (expression.contains(QRegExp("^(Over|Under)(full \\\\[hv]box .*)"))) | |
| { | |
| badbox=expression.trimmed(); | |
| /* while (tb.isValid() && !expression.contains(QRegExp("(.*) at line"))) | |
| { | |
| par++; | |
| tb=tb.next(); | |
| if (tb.isValid()) | |
| { | |
| expression=tb.text(); | |
| badbox+=expression.trimmed(); | |
| } | |
| }*/ | |
| if ( rxBadBox.indexIn(badbox) != -1 ) | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Badbox"); | |
| errorLineList.append(rxBadBox.cap(2)); | |
| errorMessageList.append(badbox.replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| else | |
| { | |
| if (!filestack.isEmpty()) errorFileList.append(filestack.last()); | |
| else errorFileList.append(""); | |
| errorTypeList.append("Badbox"); | |
| errorLineList.append("1"); | |
| errorMessageList.append(badbox.replace("*","")); | |
| errorLogList.append(QString::number(errorpar)); | |
| } | |
| errorpar=par; | |
| } | |
| if (tb.isValid()) | |
| { | |
| par++; | |
| tb = tb.next(); | |
| } | |
| } | |
| DisplayLatexError(); | |
| } | |
| void Texmaker::DisplayLatexError() | |
| { | |
| OutputTableWidget->clearContents(); | |
| QFontMetrics fm(qApp->font()); | |
| int rowheight=fm.lineSpacing()+4; | |
| int maxwidth=0; | |
| int maxwidthline=0; | |
| int row=0; | |
| if (errorFileList.count()>0) | |
| { | |
| OutputTableWidget->setRowCount(errorFileList.count()); | |
| for ( int i = 0; i <errorFileList.count(); i++ ) | |
| { | |
| if (errorTypeList.at(i)=="Error") | |
| { | |
| QTableWidgetItem *ItemFile = new QTableWidgetItem(errorFileList.at(i)); | |
| ItemFile->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemFile->setForeground(QBrush(QColor(Qt::red))); | |
| ItemFile->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| OutputTableWidget->setItem(row,1, ItemFile); | |
| QTableWidgetItem *ItemType = new QTableWidgetItem(errorTypeList.at(i)); | |
| ItemType->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemType->setForeground(QBrush(QColor(Qt::red))); | |
| ItemType->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| OutputTableWidget->setItem(row,2, ItemType); | |
| QTableWidgetItem *ItemLine = new QTableWidgetItem("line "+errorLineList.at(i)); | |
| if (fm.width("line "+errorLineList.at(i))>maxwidthline) maxwidthline=fm.width("line "+errorLineList.at(i)); | |
| ItemLine->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemLine->setForeground(QBrush(QColor(Qt::red))); | |
| ItemLine->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| ItemLine->setToolTip(tr("Click to jump to the line")); | |
| OutputTableWidget->setItem(row,3, ItemLine); | |
| QTableWidgetItem *ItemMessage = new QTableWidgetItem(errorMessageList.at(i)); | |
| if (fm.width(errorMessageList.at(i))>maxwidth) maxwidth=fm.width(errorMessageList.at(i)); | |
| ItemMessage->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemMessage->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| ItemMessage->setForeground(QBrush(QColor(Qt::red))); | |
| OutputTableWidget->setItem(row,4, ItemMessage); | |
| onlyErrorList.append(i); | |
| row++; | |
| } | |
| } | |
| for ( int i = 0; i <errorFileList.count(); i++ ) | |
| { | |
| if (errorTypeList.at(i)!="Error") | |
| { | |
| QTableWidgetItem *ItemFile = new QTableWidgetItem(errorFileList.at(i)); | |
| ItemFile->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemFile->setForeground(QBrush(QColor(Qt::blue))); | |
| ItemFile->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| OutputTableWidget->setItem(row,1, ItemFile); | |
| QTableWidgetItem *ItemType = new QTableWidgetItem(errorTypeList.at(i)); | |
| ItemType->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemType->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| ItemType->setForeground(QBrush(QColor(Qt::blue))); | |
| OutputTableWidget->setItem(row,2, ItemType); | |
| QTableWidgetItem *ItemLine = new QTableWidgetItem("line "+errorLineList.at(i)); | |
| if (fm.width("line "+errorLineList.at(i))>maxwidthline) maxwidthline=fm.width("line "+errorLineList.at(i)); | |
| ItemLine->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemLine->setForeground(QBrush(QColor(Qt::blue))); | |
| ItemLine->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| ItemLine->setToolTip(tr("Click to jump to the line")); | |
| OutputTableWidget->setItem(row,3, ItemLine); | |
| QTableWidgetItem *ItemMessage = new QTableWidgetItem(errorMessageList.at(i)); | |
| if (fm.width(errorMessageList.at(i))>maxwidth) maxwidth=fm.width(errorMessageList.at(i)); | |
| ItemMessage->setData(Qt::UserRole,errorLogList.at(i)); | |
| ItemMessage->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | |
| ItemMessage->setForeground(QBrush(QColor(Qt::blue))); | |
| OutputTableWidget->setItem(row,4, ItemMessage); | |
| row++; | |
| } | |
| } | |
| //OutputTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed); | |
| OutputTableWidget->horizontalHeader()->resizeSection(3,maxwidthline+10); | |
| //OutputTableWidget->horizontalHeader()->resizeSection(4,maxwidth); | |
| //OutputTableWidget->setColumnWidth(4,maxwidth); | |
| //OutputTableWidget->setColumnWidth(3,maxwidthline); | |
| for ( int i = 0; i<OutputTableWidget->rowCount(); ++i ) | |
| { | |
| OutputTableWidget->setRowHeight(i,rowheight); | |
| } | |
| OutputTableWidget->resizeColumnsToContents(); | |
| // OutputTableWidget->resizeRowsToContents(); | |
| } | |
| else | |
| { | |
| OutputTableWidget->setRowCount(1); | |
| OutputTableWidget->setRowHeight(0,rowheight); | |
| OutputTableWidget->clearContents(); | |
| } | |
| OutputTextEdit->setMaximumHeight(5*(fm.lineSpacing()+4)); | |
| OutputTableWidget->show(); | |
| separatorline->show(); | |
| OutputTextEdit->setCursorPosition(0 , 0); | |
| } | |
| bool Texmaker::NoLatexErrors() | |
| { | |
| return onlyErrorList.isEmpty(); | |
| } | |
| void Texmaker::NextError() | |
| { | |
| int line=0; | |
| QTableWidgetItem *Item; | |
| if (!logpresent) {LoadLog();} | |
| if (!showoutputview) ShowOutputView(true); | |
| //ViewLog(); | |
| if (logpresent && !onlyErrorList.isEmpty()) | |
| { | |
| if (errorIndex<onlyErrorList.size()-1) errorIndex=errorIndex+1; | |
| if (errorIndex<0) errorIndex=0; | |
| if (errorIndex>=onlyErrorList.count()) errorIndex=onlyErrorList.count()-1; | |
| if (singlemode)// && onlyErrorList.at(errorIndex)!=0) | |
| { | |
| line=errorLineList.at(onlyErrorList.at(errorIndex)).toInt(); | |
| for ( int i = 0; i <errorFileList.count(); i++ ) | |
| { | |
| Item = new QTableWidgetItem(" "); | |
| OutputTableWidget->setItem(i,0, Item); | |
| } | |
| Item = new QTableWidgetItem(">"); | |
| OutputTableWidget->setItem(errorIndex,0, Item); | |
| OutputTableWidget->scrollToItem(Item,QAbstractItemView::PositionAtCenter); | |
| if (line>1) ClickedOnOutput(line-1); | |
| int logline=errorLogList.at(onlyErrorList.at(errorIndex)).toInt()-1; | |
| OutputTextEdit->setCursorPosition(logline , 0); | |
| } | |
| } | |
| if (logpresent && onlyErrorList.isEmpty()) | |
| { | |
| QMessageBox::information( this,"Texmaker",tr("No LaTeX errors detected !")); | |
| OutputTextEdit->setCursorPosition(0 , 0); | |
| } | |
| } | |
| void Texmaker::PreviousError() | |
| { | |
| int line=0; | |
| QTableWidgetItem *Item; | |
| if (!logpresent) {LoadLog();} | |
| if (!showoutputview) ShowOutputView(true); | |
| //ViewLog(); | |
| if (logpresent && !onlyErrorList.isEmpty()) | |
| { | |
| if (errorIndex>0) errorIndex=errorIndex-1; | |
| if (errorIndex<0) errorIndex=0; | |
| if (errorIndex>=onlyErrorList.count()) errorIndex=onlyErrorList.count()-1; | |
| if (singlemode)// && onlyErrorList.at(errorIndex)!=0) | |
| { | |
| line=errorLineList.at(onlyErrorList.at(errorIndex)).toInt(); | |
| for ( int i = 0; i <errorFileList.count(); i++ ) | |
| { | |
| Item = new QTableWidgetItem(" "); | |
| OutputTableWidget->setItem(i,0, Item); | |
| } | |
| Item = new QTableWidgetItem(">"); | |
| OutputTableWidget->setItem(errorIndex,0, Item); | |
| OutputTableWidget->scrollToItem(Item,QAbstractItemView::PositionAtCenter); | |
| if (line>1) ClickedOnOutput(line-1); | |
| int logline=errorLogList.at(onlyErrorList.at(errorIndex)).toInt()-1; | |
| OutputTextEdit->setCursorPosition(logline , 0); | |
| } | |
| } | |
| if (logpresent && onlyErrorList.isEmpty()) | |
| { | |
| QMessageBox::information( this,"Texmaker",tr("No LaTeX errors detected !")); | |
| OutputTextEdit->setCursorPosition(0 , 0); | |
| } | |
| } | |
| //////////////// HELP ///////////////// | |
| void Texmaker::LatexHelp() | |
| { | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QString docfile=QCoreApplication::applicationDirPath() + "/latexhelp.html"; | |
| #else | |
| QString docfile=PREFIX"/share/texmaker/latexhelp.html"; | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QString docfile=QCoreApplication::applicationDirPath() + "/../Resources/latexhelp.html"; | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QString docfile=QCoreApplication::applicationDirPath() + "/latexhelp.html"; | |
| #endif | |
| QFileInfo fic(docfile); | |
| if (fic.exists() && fic.isReadable() ) | |
| { | |
| if (browserWindow) | |
| { | |
| browserWindow->close(); | |
| } | |
| browserWindow=new Browser("file:///"+docfile,true, 0); | |
| browserWindow->raise(); | |
| browserWindow->show(); | |
| // QDesktopServices::openUrl("file:///"+docfile); | |
| } | |
| else { QMessageBox::warning( this,tr("Error"),tr("File not found"));} | |
| } | |
| void Texmaker::UserManualHelp() | |
| { | |
| QString locale = QString(QLocale::system().name()).left(2); | |
| if ( locale.length() < 2 || (locale!="fr" /*&& locale!="hu" && locale!="ru"*/) ) locale = "en"; | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QString docfile=QCoreApplication::applicationDirPath() + "/usermanual_"+locale+".html"; | |
| #else | |
| QString docfile=PREFIX"/share/texmaker/usermanual_"+locale+".html"; | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QString docfile=QCoreApplication::applicationDirPath() + "/../Resources/usermanual_"+locale+".html"; | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QString docfile=QCoreApplication::applicationDirPath() + "/usermanual_"+locale+".html"; | |
| #endif | |
| QFileInfo fic(docfile); | |
| if (fic.exists() && fic.isReadable() ) | |
| { | |
| if (browserWindow) | |
| { | |
| browserWindow->close(); | |
| } | |
| browserWindow=new Browser("file:///"+docfile,true, 0); | |
| browserWindow->raise(); | |
| browserWindow->show(); | |
| // QDesktopServices::openUrl("file:///"+docfile); | |
| } | |
| else { QMessageBox::warning( this,tr("Error"),tr("File not found"));} | |
| } | |
| void Texmaker::TexDocHelp() | |
| { | |
| QString text=""; | |
| QString item=""; | |
| TexdocDialog *texdocDlg = new TexdocDialog(this); | |
| texdocDlg->ui.lineEditCommand->setText(texdoc_command); | |
| if (currentEditorView()) | |
| { | |
| if (currentEditorView()->editor->textCursor().hasSelection()) item=currentEditorView()->editor->textCursor().selectedText(); | |
| } | |
| texdocDlg->ui.lineEdit->setText(item); | |
| if (texdocDlg->exec()) | |
| { | |
| text =texdocDlg->ui.lineEdit->text(); | |
| texdoc_command=texdocDlg->ui.lineEditCommand->text(); | |
| } | |
| if (!text.isEmpty()) | |
| { | |
| QProcess* texdocprocess=new QProcess(); | |
| if (!texdocprocess->startDetached(QString("texdoc ")+text)) QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| } | |
| } | |
| void Texmaker::HelpAbout() | |
| { | |
| AboutDialog *abDlg = new AboutDialog(this); | |
| abDlg->exec(); | |
| } | |
| void Texmaker::CheckVersion() | |
| { | |
| VersionDialog *verDlg = new VersionDialog(this); | |
| verDlg->exec(); | |
| } | |
| void Texmaker::Docufrlatex() | |
| { | |
| QDesktopServices::openUrl(QUrl("http://www.xm1math.net/doculatex/index.html")); | |
| } | |
| void Texmaker::Doculatex() | |
| { | |
| QDesktopServices::openUrl(QUrl("http://en.wikibooks.org/wiki/LaTeX")); | |
| } | |
| ////////////// OPTIONS ////////////////////////////////////// | |
| void Texmaker::GeneralOptions() | |
| { | |
| ConfigDialog *confDlg = new ConfigDialog(this); | |
| confDlg->ui.lineEditLualatex->setText(lualatex_command); | |
| confDlg->ui.lineEditXelatex->setText(xelatex_command); | |
| confDlg->ui.lineEditPath->setText(extra_path); | |
| confDlg->ui.lineEditLatex->setText(latex_command); | |
| confDlg->ui.lineEditPdflatex->setText(pdflatex_command); | |
| confDlg->ui.lineEditDvips->setText(dvips_command); | |
| confDlg->ui.lineEditDviviewer->setText(viewdvi_command); | |
| confDlg->ui.lineEditPsviewer->setText(viewps_command); | |
| confDlg->ui.lineEditDvipdfm->setText(dvipdf_command); | |
| confDlg->ui.lineEditPs2pdf->setText(ps2pdf_command); | |
| confDlg->ui.lineEditBibtex->setText(bibtex_command); | |
| confDlg->ui.lineEditMakeindex->setText(makeindex_command); | |
| confDlg->ui.lineEditPdfviewer->setText(viewpdf_command); | |
| if (builtinpdfview) confDlg->ui.radioButtonInternalPdfViewer->setChecked(true); | |
| else confDlg->ui.radioButtonExternalPdfViewer->setChecked(true); | |
| confDlg->ui.checkBoxInternalPdfViewEmbed->setChecked(embedinternalpdf); | |
| confDlg->ui.lineEditMetapost->setText(metapost_command); | |
| confDlg->ui.lineEditGhostscript->setText(ghostscript_command); | |
| confDlg->ui.lineEditAsymptote->setText(asymptote_command); | |
| confDlg->ui.lineEditLatexmk->setText(latexmk_command); | |
| confDlg->ui.lineEditSweave->setText(sweave_command); | |
| if (singleviewerinstance) confDlg->ui.checkBoxSingleInstanceViewer->setChecked(true); | |
| confDlg->ui.checkBoxTempBuild->setChecked(useoutputdir); | |
| confDlg->ui.comboBoxFont->lineEdit()->setText(EditorFont.family() ); | |
| confDlg->ui.comboBoxEncoding->setCurrentIndex(confDlg->ui.comboBoxEncoding->findText(input_encoding, Qt::MatchExactly)); | |
| confDlg->ui.spinBoxSize->setValue(EditorFont.pointSize() ); | |
| if (wordwrap) {confDlg->ui.checkBoxWordwrap->setChecked(true);} | |
| else {confDlg->ui.checkBoxWordwrap->setChecked(false);} | |
| if (tabspaces) {confDlg->ui.checkBoxTab->setChecked(true);} | |
| else {confDlg->ui.checkBoxTab->setChecked(false);} | |
| confDlg->ui.spinBoxTab->setValue(tabwidth); | |
| if (watchfiles) {confDlg->ui.checkBoxWatcher->setChecked(true);} | |
| else {confDlg->ui.checkBoxWatcher->setChecked(false);} | |
| if (autosave) {confDlg->ui.checkBoxAutoSave->setChecked(true);} | |
| else {confDlg->ui.checkBoxAutoSave->setChecked(false);} | |
| if (showline) {confDlg->ui.checkBoxLinenumber->setChecked(true);} | |
| else {confDlg->ui.checkBoxLinenumber->setChecked(false);} | |
| if (completion) {confDlg->ui.checkBoxCompletion->setChecked(true);} | |
| else {confDlg->ui.checkBoxCompletion->setChecked(false);} | |
| if (inlinespellcheck) {confDlg->ui.checkBoxInlineSpell->setChecked(true);} | |
| else {confDlg->ui.checkBoxInlineSpell->setChecked(false);} | |
| confDlg->ui.lineEditAspellCommand->setText(spell_dic); | |
| if (quickmode==1) {confDlg->ui.radioButton1->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==2) {confDlg->ui.radioButton2->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==3) {confDlg->ui.radioButton3->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==4) {confDlg->ui.radioButton4->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==5) {confDlg->ui.radioButton5->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==6) {confDlg->ui.radioButton6->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(true);confDlg->ui.pushButtonWizard->setEnabled(true);} | |
| if (quickmode==7) {confDlg->ui.radioButton7->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==8) {confDlg->ui.radioButton8->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==9) {confDlg->ui.radioButton9->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==10) {confDlg->ui.radioButton10->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==11) {confDlg->ui.radioButton11->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==12) {confDlg->ui.radioButton12->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==13) {confDlg->ui.radioButton13->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| if (quickmode==14) {confDlg->ui.radioButton14->setChecked(true); confDlg->ui.lineEditUserquick->setEnabled(false);confDlg->ui.pushButtonWizard->setEnabled(false);} | |
| confDlg->ui.lineEditUserquick->setText(userquick_command); | |
| confDlg->ui.lineEditAsyQuick->setText(quick_asy_command); | |
| confDlg->ui.lineEditPrinter->setText(lp_options); | |
| int row=0; | |
| KeysMap::Iterator its, iter; | |
| QString d,f; | |
| for( its = shortcuts.begin(); its != shortcuts.end(); ++its ) | |
| { | |
| d=its.key().section("/",0,0); | |
| for( iter = actionstext.begin(); iter != actionstext.end(); ++iter ) | |
| { | |
| f=iter.key().section("/",0,0); | |
| if (d==f) | |
| { | |
| QTableWidgetItem *newItem = new QTableWidgetItem(iter.value()); | |
| //QTableWidgetItem *newItem = new QTableWidgetItem(*actionstext.find(its.key())); | |
| newItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); | |
| newItem->setData(Qt::UserRole, its.key()); | |
| confDlg->ui.shorttableWidget->setRowCount(row+1); | |
| confDlg->ui.shorttableWidget->setItem(row, 0, newItem); | |
| QTableWidgetItem *newItembis = new QTableWidgetItem(its.value()); | |
| //QTableWidgetItem *newItem = new QTableWidgetItem(*actionstext.find(its.key())); | |
| newItembis->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); | |
| newItembis->setData(Qt::UserRole,QString("key")); | |
| confDlg->ui.shorttableWidget->setItem(row, 1,newItembis); | |
| row++; | |
| } | |
| } | |
| } | |
| confDlg->ui.shorttableWidget->horizontalHeader()->resizeSection( 0, 250 ); | |
| confDlg->ui.shorttableWidget->verticalHeader()->hide(); | |
| confDlg->ui.pushButtonToggleFocus->setText(keyToggleFocus); | |
| QTableWidgetItem *colorItem; | |
| colorItem= new QTableWidgetItem(colorBackground.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(0,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorLine.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(1,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorHighlight.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(2,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorStandard.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(3,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorComment.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(4,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorMath.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(5,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorCommand.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(6,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorKeyword.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(7,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorVerbatim.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(8,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorTodo.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(9,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorKeywordGraphic.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(10,1,colorItem); | |
| colorItem= new QTableWidgetItem(colorNumberGraphic.name()); | |
| colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); | |
| confDlg->ui.colortableWidget->setItem(11,1,colorItem); | |
| disconnect(autosaveTimer, SIGNAL(timeout()), this, SLOT(fileBackupAll())); | |
| autosaveTimer->stop(); | |
| if (confDlg->exec()) | |
| { | |
| listViewerCommands.clear(); | |
| for(int row=0; row<confDlg->ui.shorttableWidget->rowCount(); row++ ) | |
| { | |
| QString itemtext = confDlg->ui.shorttableWidget->item(row, 0)->text(); | |
| QString itemshortcut = confDlg->ui.shorttableWidget->item(row, 1)->text(); | |
| QString itemdata=confDlg->ui.shorttableWidget->item(row, 0)->data(Qt::UserRole).toString(); | |
| shortcuts.remove(itemdata); | |
| shortcuts.insert(itemdata,itemshortcut); | |
| } | |
| ModifyShortcuts(); | |
| keyToggleFocus=confDlg->ui.pushButtonToggleFocus->text(); | |
| if (confDlg->ui.radioButton1->isChecked()) quickmode=1; | |
| if (confDlg->ui.radioButton2->isChecked()) quickmode=2; | |
| if (confDlg->ui.radioButton3->isChecked()) quickmode=3; | |
| if (confDlg->ui.radioButton4->isChecked()) quickmode=4; | |
| if (confDlg->ui.radioButton5->isChecked()) quickmode=5; | |
| if (confDlg->ui.radioButton6->isChecked()) quickmode=6; | |
| if (confDlg->ui.radioButton7->isChecked()) quickmode=7; | |
| if (confDlg->ui.radioButton8->isChecked()) quickmode=8; | |
| if (confDlg->ui.radioButton9->isChecked()) quickmode=9; | |
| if (confDlg->ui.radioButton10->isChecked()) quickmode=10; | |
| if (confDlg->ui.radioButton11->isChecked()) quickmode=11; | |
| if (confDlg->ui.radioButton12->isChecked()) quickmode=12; | |
| if (confDlg->ui.radioButton13->isChecked()) quickmode=13; | |
| if (confDlg->ui.radioButton14->isChecked()) quickmode=14; | |
| userquick_command=confDlg->ui.lineEditUserquick->text(); | |
| quick_asy_command=confDlg->ui.lineEditAsyQuick->text(); | |
| lp_options=confDlg->ui.lineEditPrinter->text(); | |
| lualatex_command=confDlg->ui.lineEditLualatex->text(); | |
| xelatex_command=confDlg->ui.lineEditXelatex->text(); | |
| extra_path=confDlg->ui.lineEditPath->text(); | |
| latex_command=confDlg->ui.lineEditLatex->text(); | |
| pdflatex_command=confDlg->ui.lineEditPdflatex->text(); | |
| dvips_command=confDlg->ui.lineEditDvips->text(); | |
| viewdvi_command=confDlg->ui.lineEditDviviewer->text(); | |
| viewps_command=confDlg->ui.lineEditPsviewer->text(); | |
| dvipdf_command=confDlg->ui.lineEditDvipdfm->text(); | |
| ps2pdf_command=confDlg->ui.lineEditPs2pdf->text(); | |
| bibtex_command=confDlg->ui.lineEditBibtex->text(); | |
| makeindex_command=confDlg->ui.lineEditMakeindex->text(); | |
| viewpdf_command=confDlg->ui.lineEditPdfviewer->text(); | |
| metapost_command=confDlg->ui.lineEditMetapost->text(); | |
| if (metapost_command.right(1)!=" ") metapost_command+=" "; | |
| ghostscript_command=confDlg->ui.lineEditGhostscript->text(); | |
| asymptote_command=confDlg->ui.lineEditAsymptote->text(); | |
| latexmk_command=confDlg->ui.lineEditLatexmk->text(); | |
| sweave_command=confDlg->ui.lineEditSweave->text(); | |
| builtinpdfview=confDlg->ui.radioButtonInternalPdfViewer->isChecked(); | |
| embedinternalpdf=confDlg->ui.checkBoxInternalPdfViewEmbed->isChecked(); | |
| if (embedinternalpdf && builtinpdfview) | |
| { | |
| StackedViewers->show(); | |
| ViewPdfPanelAct->setEnabled(true); | |
| togglePdfButton->show(); | |
| ShowPdfView(false); | |
| ShowSourceView(false); | |
| if (showpdfview) | |
| { | |
| StackedViewers->show(); | |
| sourceviewerWidget->hide(); | |
| } | |
| else if (showsourceview) | |
| { | |
| StackedViewers->setCurrentWidget(sourceviewerWidget); | |
| StackedViewers->show(); | |
| } | |
| else StackedViewers->hide(); | |
| } | |
| else | |
| { | |
| if (pdfviewerWidget) {StackedViewers->removeWidget(pdfviewerWidget);delete(pdfviewerWidget);} | |
| //StackedViewers->hide(); | |
| ViewPdfPanelAct->setEnabled(false); | |
| togglePdfButton->hide(); | |
| if (showsourceview) | |
| { | |
| StackedViewers->setCurrentWidget(sourceviewerWidget); | |
| StackedViewers->show(); | |
| } | |
| else StackedViewers->hide(); | |
| } | |
| singleviewerinstance=confDlg->ui.checkBoxSingleInstanceViewer->isChecked(); | |
| useoutputdir=confDlg->ui.checkBoxTempBuild->isChecked(); | |
| if ((pdfviewerWidget) && keyToggleFocus!="none") pdfviewerWidget->setKeyEditorFocus(QKeySequence(keyToggleFocus)); | |
| if (pdfviewerWidget) pdfviewerWidget->setGSCommand(ghostscript_command); | |
| if ((pdfviewerWindow) && keyToggleFocus!="none") pdfviewerWindow->setKeyEditorFocus(QKeySequence(keyToggleFocus)); | |
| if (pdfviewerWindow) pdfviewerWindow->setGSCommand(ghostscript_command); | |
| QString fam=confDlg->ui.comboBoxFont->lineEdit()->text(); | |
| int si=confDlg->ui.spinBoxSize->value(); | |
| QFont F(fam,si); | |
| EditorFont=F; | |
| input_encoding=confDlg->ui.comboBoxEncoding->currentText(); | |
| stat3->setText(QString(" %1 ").arg(input_encoding)); | |
| wordwrap=confDlg->ui.checkBoxWordwrap->isChecked(); | |
| tabspaces=confDlg->ui.checkBoxTab->isChecked(); | |
| tabwidth=confDlg->ui.spinBoxTab->value(); | |
| watchfiles=confDlg->ui.checkBoxWatcher->isChecked(); | |
| autosave=confDlg->ui.checkBoxAutoSave->isChecked(); | |
| completion=confDlg->ui.checkBoxCompletion->isChecked(); | |
| showline=confDlg->ui.checkBoxLinenumber->isChecked(); | |
| inlinespellcheck=confDlg->ui.checkBoxInlineSpell->isChecked(); | |
| spell_dic=confDlg->ui.lineEditAspellCommand->text(); | |
| if (spellChecker) delete spellChecker; | |
| if (spelldicExist()) | |
| { | |
| QString dic=spell_dic.left(spell_dic.length()-4); | |
| spellChecker = new Hunspell(dic.toLatin1()+".aff",dic.toLatin1()+".dic"); | |
| } | |
| else spellChecker=0; | |
| QFileInfo fispell(spell_dic); | |
| pdfCheckerLang=fispell.fileName().left(2); | |
| if (!pdfCheckerLang.contains(QRegExp("(de|en|es|fr|id|it|nl|pl|pt|ru)"))) pdfCheckerLang="en"; | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(0,1)->text())) colorBackground=QColor(confDlg->ui.colortableWidget->item(0,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(1,1)->text())) colorLine=QColor(confDlg->ui.colortableWidget->item(1,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(2,1)->text())) colorHighlight=QColor(confDlg->ui.colortableWidget->item(2,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(3,1)->text())) colorStandard=QColor(confDlg->ui.colortableWidget->item(3,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(4,1)->text())) colorComment=QColor(confDlg->ui.colortableWidget->item(4,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(5,1)->text())) colorMath=QColor(confDlg->ui.colortableWidget->item(5,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(6,1)->text())) colorCommand=QColor(confDlg->ui.colortableWidget->item(6,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(7,1)->text())) colorKeyword=QColor(confDlg->ui.colortableWidget->item(7,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(8,1)->text())) colorVerbatim=QColor(confDlg->ui.colortableWidget->item(8,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(9,1)->text())) colorTodo=QColor(confDlg->ui.colortableWidget->item(9,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(10,1)->text())) colorKeywordGraphic=QColor(confDlg->ui.colortableWidget->item(10,1)->text()); | |
| if (QColor::isValidColor(confDlg->ui.colortableWidget->item(11,1)->text())) colorNumberGraphic=QColor(confDlg->ui.colortableWidget->item(11,1)->text()); | |
| QTextCodec* codec = QTextCodec::codecForName(input_encoding.toLatin1()); | |
| if(!codec) codec = QTextCodec::codecForLocale(); | |
| QString tmpSource =sourceviewerWidget->editor->toPlainText(); | |
| sourceviewerWidget->editor->setEncoding(input_encoding); | |
| if (wordwrap) {sourceviewerWidget->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {sourceviewerWidget->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| sourceviewerWidget->changeSettings(EditorFont,showline); | |
| sourceviewerWidget->editor->setColors(edcolors()); | |
| sourceviewerWidget->editor->highlighter->setColors(hicolors()); | |
| QTextStream tsSource( &tmpSource,QIODevice::ReadOnly ); | |
| tsSource.setCodec(codec); | |
| sourceviewerWidget->editor->setPlainText( tsSource.readAll() ); | |
| if (currentEditorView()) | |
| { | |
| LatexEditorView *temp = new LatexEditorView( EditorView,EditorFont,showline,edcolors(),hicolors(),inlinespellcheck,spell_ignored_words,spellChecker,tabspaces,tabwidth,QKeySequence(keyToggleFocus),getName(),userTagsList); | |
| temp=currentEditorView(); | |
| FilesMap::Iterator it; | |
| initCompleter(); | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| EditorView->setCurrentIndex(EditorView->indexOf(it.key())); | |
| bool MODIFIED =currentEditorView()->editor->document()->isModified(); | |
| QString tmp =currentEditorView()->editor->toPlainText(); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| disconnect(currentEditorView()->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| disconnect(currentEditorView()->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| disconnect(currentEditorView()->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| disconnect(currentEditorView()->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| //currentEditorView()->editor->clear(); | |
| currentEditorView()->editor->setSpellChecker(spellChecker); | |
| currentEditorView()->editor->highlighter->setSpellChecker(spellChecker); | |
| currentEditorView()->editor->activateInlineSpell(inlinespellcheck); | |
| currentEditorView()->editor->highlighter->activateInlineSpell(inlinespellcheck); | |
| if (wordwrap) {currentEditorView()->editor->setWordWrapMode(QTextOption::WordWrap);} | |
| else {currentEditorView()->editor->setWordWrapMode(QTextOption::NoWrap);} | |
| if (completion) currentEditorView()->editor->setCompleter(completer); | |
| else currentEditorView()->editor->setCompleter(0); | |
| currentEditorView()->editor->setTabSettings(tabspaces,tabwidth); | |
| currentEditorView()->editor->setKeyViewerFocus(QKeySequence(keyToggleFocus)); | |
| currentEditorView()->changeSettings(EditorFont,showline); | |
| currentEditorView()->editor->highlighter->setColors(hicolors()); | |
| currentEditorView()->editor->setColors(edcolors()); | |
| QTextStream ts( &tmp,QIODevice::ReadOnly ); | |
| ts.setCodec(codec); | |
| currentEditorView()->editor->setPlainText( ts.readAll() ); | |
| currentEditorView()->editor->setLastSavedTime(QDateTime::currentDateTime()); | |
| if( MODIFIED ) currentEditorView()->editor->document()->setModified(true ); | |
| else currentEditorView()->editor->document()->setModified( false ); | |
| connect(currentEditorView()->editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(NewDocumentStatus(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(spellme()), this, SLOT(editSpell())); | |
| connect(currentEditorView()->editor, SIGNAL(tooltiptab()), this, SLOT(editTipTab())); | |
| connect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| connect(currentEditorView()->editor, SIGNAL(requestpdf(int)),this, SLOT(jumpToPdfline(int))); | |
| connect(currentEditorView()->editor->document(), SIGNAL(undoAvailable(bool)),UndoAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor->document(), SIGNAL(redoAvailable(bool)),RedoAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CutAct, SLOT(setEnabled(bool))); | |
| connect(currentEditorView()->editor, SIGNAL(copyAvailable(bool)), CopyAct, SLOT(setEnabled(bool))); | |
| currentEditorView()->editor->setLastNumLines(currentEditorView()->editor->numoflines()); | |
| connect(currentEditorView()->editor, SIGNAL(numLinesChanged(int)), this, SLOT(refreshAllFromCursor(int))); | |
| connect(currentEditorView()->editor, SIGNAL(requestGotoStructure(int)),this, SLOT(jumpToStructure(int))); | |
| connect(currentEditorView()->editor, SIGNAL(poshaschanged(int,int)),this, SLOT(showCursorPos(int,int))); | |
| //UpdateStructure(); | |
| //UpdateBibliography(); | |
| QApplication::restoreOverrideCursor(); | |
| } | |
| EditorView->setCurrentIndex(EditorView->indexOf(temp)); | |
| UpdateCaption(); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| //OutputTextEdit->insertLine("Editor settings apply only to new loaded document."); | |
| currentEditorView()->editor->setFocus(); | |
| } | |
| } | |
| if (autosave) | |
| { | |
| connect(autosaveTimer, SIGNAL(timeout()), this, SLOT(fileBackupAll())); | |
| autosaveTimer->start(600000); | |
| } | |
| } | |
| void Texmaker::ToggleMode() | |
| { | |
| //QAction *action = qobject_cast<QAction *>(sender()); | |
| if (!singlemode) | |
| { | |
| ToggleAct->setText(tr("Define Current Document as 'Master Document'")); | |
| OutputTextEdit->clear(); | |
| OutputTableWidget->hide(); | |
| OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| separatorline->hide(); | |
| logpresent=false; | |
| singlemode=true; | |
| listbibfiles.clear(); | |
| listchildfiles.clear(); | |
| stat1->setText(QString(" %1 ").arg(tr("Normal Mode"))); | |
| ToggleDocAct->setEnabled(false); | |
| return; | |
| } | |
| if (singlemode && currentEditorView()) | |
| { | |
| MasterName=getName(); | |
| if (MasterName.startsWith("untitled") || MasterName=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| return; | |
| } | |
| QString shortName = MasterName; | |
| int pos; | |
| while ( (pos = (int)shortName.indexOf('/')) != -1 ) shortName.remove(0,pos+1); | |
| ToggleAct->setText(tr("Normal Mode (current master document :")+shortName+")"); | |
| singlemode=false; | |
| stat1->setText(QString(" %1 ").arg(tr("Master Document :")+shortName)); | |
| ToggleDocAct->setEnabled(true); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| return; | |
| } | |
| } | |
| void Texmaker::onOtherInstanceMessage(const QString &msg) // Added slot for messages to the single instance | |
| { | |
| QStringList argv = msg.split("#!#"); | |
| int argc = argv.size(); | |
| for ( int i = 1; i < argc; ++i ) | |
| { | |
| QString arg = argv[ i ]; | |
| if ( arg[0] != '-' ) load( arg ); | |
| if ( arg == "-master" ) ToggleMode(); | |
| if (( arg == "-line" ) && (i<argc-1)) setLine( argv[ ++i ] ); | |
| if ( arg == "-insert" ) insertFromCommandLine( argv[ ++i ] ); | |
| } | |
| //A bad (but applicable) trick for activating Texmaker MainWindow //add by S. R. Alavizadeh | |
| //setWindowState(Qt::WindowMinimized); | |
| //setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); | |
| //show(); | |
| } | |
| ////////////////// VIEW //////////////// | |
| void Texmaker::gotoNextDocument() | |
| { | |
| if ( EditorView->count() < 2 ) return; | |
| int cPage = EditorView->currentIndex() + 1; | |
| if ( cPage >= EditorView->count() ) EditorView->setCurrentIndex( 0 ); | |
| else EditorView->setCurrentIndex( cPage ); | |
| } | |
| void Texmaker::gotoPrevDocument() | |
| { | |
| if ( EditorView->count() < 2 ) return; | |
| int cPage = EditorView->currentIndex() - 1; | |
| if ( cPage < 0 ) EditorView->setCurrentIndex( EditorView->count() - 1 ); | |
| else EditorView->setCurrentIndex( cPage ); | |
| } | |
| void Texmaker::SetInterfaceFont() | |
| { | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| X11FontDialog *xfdlg = new X11FontDialog(this); | |
| int ft=xfdlg->ui.comboBoxFont->findText (x11fontfamily , Qt::MatchExactly); | |
| xfdlg->ui.comboBoxFont->setCurrentIndex(ft); | |
| xfdlg->ui.spinBoxSize->setValue(x11fontsize); | |
| if (xfdlg->exec()) | |
| { | |
| x11fontfamily=xfdlg->ui.comboBoxFont->currentText(); | |
| x11fontsize=xfdlg->ui.spinBoxSize->value(); | |
| QFont x11Font (x11fontfamily,x11fontsize); | |
| QApplication::setFont(x11Font); | |
| } | |
| #endif | |
| } | |
| void Texmaker::gotoBookmark1() | |
| { | |
| if ( !currentEditorView() ) return; | |
| int l=currentEditorView()->editor->UserBookmark[0]; | |
| if (l>0) currentEditorView()->editor->gotoLine(l-1); | |
| } | |
| void Texmaker::gotoBookmark2() | |
| { | |
| if ( !currentEditorView() ) return; | |
| int l=currentEditorView()->editor->UserBookmark[1]; | |
| if (l>0) currentEditorView()->editor->gotoLine(l-1); | |
| } | |
| void Texmaker::gotoBookmark3() | |
| { | |
| if ( !currentEditorView() ) return; | |
| int l=currentEditorView()->editor->UserBookmark[2]; | |
| if (l>0) currentEditorView()->editor->gotoLine(l-1); | |
| } | |
| //********************************* | |
| void Texmaker::dragEnterEvent(QDragEnterEvent *event) | |
| { | |
| if (event->mimeData()->hasFormat("text/uri-list")) event->acceptProposedAction(); | |
| } | |
| void Texmaker::dropEvent(QDropEvent *event) | |
| { | |
| #if defined(Q_OS_WIN32) | |
| QRegExp rx("file:(/+)(.*\\.(?:tex|bib|sty|cls|mp|asy|Rnw|tks))"); | |
| #else | |
| QRegExp rx("file:(//)(.*\\.(?:tex|bib|sty|cls|mp|asy|Rnw|tks))"); | |
| #endif | |
| QList<QUrl> uris=event->mimeData()->urls(); | |
| QString uri; | |
| for (int i = 0; i < uris.size(); ++i) | |
| { | |
| uri=uris.at(i).toString(); | |
| if (rx.exactMatch(uri)) {load(rx.cap(2));} | |
| } | |
| event->acceptProposedAction(); | |
| } | |
| //*********************************** | |
| void Texmaker::SetMostUsedSymbols() | |
| { | |
| for ( int i = 0; i <=11; ++i ) symbolMostused[i]=-1; | |
| QList<int> list_num, list_score; | |
| list_num.clear(); | |
| list_score.clear(); | |
| for (int i=0; i <412 ; i++) | |
| { | |
| list_num.append(i); | |
| list_score.append(symbolScore[i]); | |
| } | |
| int max; | |
| for (int i = 0; i < 412; i++) | |
| { | |
| max=i; | |
| for (int j = i+1; j < 412; j++) | |
| { | |
| if (list_score.at(j)>list_score.at(max)) max=j; | |
| } | |
| if (max!=i) | |
| { | |
| list_num.swap(i,max); | |
| list_score.swap(i,max); | |
| } | |
| } | |
| for ( int i = 0; i <=11; ++i ) | |
| { | |
| if (list_score.at(i)>0) symbolMostused[i]=list_num.at(i); | |
| } | |
| MostUsedListWidget->SetUserPage(symbolMostused); | |
| } | |
| void Texmaker::InsertFavoriteSymbols() | |
| { | |
| QString actData; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| QRegExp rxnumber(";([0-9]+)"); | |
| int number=-1; | |
| if (!actData.isEmpty()) | |
| { | |
| if ( rxnumber.indexIn(actData) != -1) number=rxnumber.cap(1).toInt(); | |
| if (!favoriteSymbolList.contains(number)) favoriteSymbolList.append(number); | |
| FavoriteListWidget->SetFavoritePage(favoriteSymbolList); | |
| } | |
| } | |
| } | |
| void Texmaker::RemoveFavoriteSymbols() | |
| { | |
| QString actData; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| QRegExp rxnumber(";([0-9]+)"); | |
| int number=-1; | |
| if (!actData.isEmpty()) | |
| { | |
| if ( rxnumber.indexIn(actData) != -1) number=rxnumber.cap(1).toInt(); | |
| if (favoriteSymbolList.contains(number)) favoriteSymbolList.removeOne(number); | |
| FavoriteListWidget->SetFavoritePage(favoriteSymbolList); | |
| } | |
| } | |
| } | |
| void Texmaker::RemoveUserTag() | |
| { | |
| QString actData; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| userTagsList.removeOne(actData); | |
| usertagsListWidget->updateList(userTagsList); | |
| if (currentEditorView()) | |
| { | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| it.key()->editor->setUserTagsList(userTagsList); | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::AddUserTag() | |
| { | |
| AddTagDialog *atDlg = new AddTagDialog(this); | |
| QString item,code; | |
| QString trigger=""; | |
| if ( atDlg->exec() ) | |
| { | |
| item=atDlg->ui.itemEdit->text(); | |
| code=atDlg->ui.tagEdit->toPlainText(); | |
| trigger=atDlg->ui.triggerEdit->text(); | |
| if (!item.isEmpty() && !code.isEmpty()) | |
| { | |
| item.remove("#"); | |
| code.remove("#"); | |
| trigger.remove("#"); | |
| trigger.remove(":"); | |
| userTagsList.append(item+"#"+code+"#"+trigger); | |
| usertagsListWidget->updateList(userTagsList); | |
| if (currentEditorView()) | |
| { | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| it.key()->editor->setUserTagsList(userTagsList); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::UpdateUserTag() | |
| { | |
| userTagsList.clear(); | |
| QString data, item, code, trigger; | |
| QStringList tagList; | |
| for ( int i = 0; i <usertagsListWidget->count(); ++i ) | |
| { | |
| tagList.clear(); | |
| data=usertagsListWidget->item(i)->text()+"#"+usertagsListWidget->item(i)->data(Qt::UserRole).toString(); | |
| tagList=data.split("#"); | |
| item=""; | |
| code=""; | |
| trigger=""; | |
| if (tagList.count()>=2) | |
| { | |
| item=tagList.at(0); | |
| code=tagList.at(1); | |
| if (tagList.count()==3) trigger=tagList.at(2); | |
| if (!item.isEmpty() && !code.isEmpty()) | |
| { | |
| item.remove("#"); | |
| code.remove("#"); | |
| trigger.remove("#"); | |
| trigger.remove(":"); | |
| userTagsList.append(item+"#"+code+"#"+trigger); | |
| } | |
| } | |
| } | |
| usertagsListWidget->updateList(userTagsList); | |
| if (currentEditorView()) | |
| { | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| it.key()->editor->setUserTagsList(userTagsList); | |
| } | |
| } | |
| } | |
| void Texmaker::ChangeUserTag() | |
| { | |
| QString actData; | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| int index=-1; | |
| QString item=""; | |
| QString code=""; | |
| QString trigger=""; | |
| QString newitem,newcode; | |
| QString newtrigger=""; | |
| QStringList tagList; | |
| if (action) | |
| { | |
| actData=action->data().toString(); | |
| index=userTagsList.indexOf(actData,0); | |
| if (index>-1) | |
| { | |
| tagList= userTagsList.at(index).split("#"); | |
| if (tagList.count()>=2) | |
| { | |
| item=tagList.at(0); | |
| code=tagList.at(1); | |
| if (tagList.count()==3) trigger=tagList.at(2); | |
| AddTagDialog *atDlg = new AddTagDialog(this); | |
| atDlg->ui.itemEdit->setText(item); | |
| atDlg->ui.tagEdit->setPlainText(code); | |
| atDlg->ui.triggerEdit->setText(trigger); | |
| if ( atDlg->exec() ) | |
| { | |
| item=atDlg->ui.itemEdit->text(); | |
| code=atDlg->ui.tagEdit->toPlainText(); | |
| trigger=atDlg->ui.triggerEdit->text(); | |
| if (!item.isEmpty() && !code.isEmpty()) | |
| { | |
| item.remove("#"); | |
| code.remove("#"); | |
| trigger.remove("#"); | |
| trigger.remove(":"); | |
| userTagsList.replace(index,item+"#"+code+"#"+trigger); | |
| usertagsListWidget->updateList(userTagsList); | |
| if (currentEditorView()) | |
| { | |
| FilesMap::Iterator it; | |
| for( it = filenames.begin(); it != filenames.end(); ++it ) | |
| { | |
| it.key()->editor->setUserTagsList(userTagsList); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::ModifyShortcuts() | |
| { | |
| KeysMap::Iterator its; | |
| QString d,f,s; | |
| QList<QAction *> listaction; | |
| listaction << toolMenu->actions(); | |
| listaction << editMenu->actions(); | |
| listaction << NextDocAct << PrevDocAct; | |
| listaction << latex1Menu->actions(); | |
| listaction << latex11Menu->actions(); | |
| listaction << latex12Menu->actions(); | |
| listaction << latex13Menu->actions(); | |
| listaction << latex14Menu->actions(); | |
| listaction << latex15Menu->actions(); | |
| listaction << latex16Menu->actions(); | |
| listaction << latex17Menu->actions(); | |
| listaction << latex18Menu->actions(); | |
| listaction << math1Menu->actions(); | |
| listaction << math11Menu->actions(); | |
| listaction << math12Menu->actions(); | |
| listaction << math13Menu->actions(); | |
| listaction << math14Menu->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| actionstext.clear(); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action=iterator.next(); | |
| if (action && (!action->menu()) && (!action->data().toString().isEmpty())) | |
| { | |
| actionstext.insert(action->data().toString(),action->text()); | |
| d=action->data().toString().section("/",0,0); | |
| //action->setShortcut(QKeySequence("")); | |
| for( its = shortcuts.begin(); its != shortcuts.end(); ++its ) | |
| { | |
| f=its.key().section("/",0,0); | |
| s=its.value(); | |
| if (f==d) action->setShortcut(QKeySequence("")); | |
| if (f==d && s!="none" && !s.isEmpty()) | |
| { action->setShortcut(QKeySequence(s));} | |
| } | |
| // its=shortcuts.find(action->data().toString()); | |
| // if (its!=shortcuts.end()) | |
| // { | |
| // s=*its; | |
| // if (s!="none" && !s.isEmpty()) action->setShortcut(s); | |
| // } | |
| //QString s=*shortcuts.find(action->data().toString()); | |
| //if (s!="none" && !s.isEmpty()) action->setShortcut(s); | |
| } | |
| } | |
| } | |
| void Texmaker::initCompleter() | |
| { | |
| QTextCodec *codec = QTextCodec::codecForName("UTF-8"); | |
| QAbstractItemModel *model; | |
| QFile tagsfile(":/completion/completion.txt"); | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| #ifdef USB_VERSION | |
| QFile userTagsfile(QCoreApplication::applicationDirPath()+"/completion.txt"); | |
| #else | |
| QFile userTagsfile(PREFIX"/share/texmaker/completion.txt"); | |
| #endif | |
| #endif | |
| #if defined(Q_OS_MAC) | |
| QFile userTagsfile(QCoreApplication::applicationDirPath() + "/../Resources/completion.txt"); | |
| #endif | |
| #if defined(Q_OS_WIN32) | |
| QFile userTagsfile(QCoreApplication::applicationDirPath()+"/completion.txt"); | |
| #endif | |
| if (!tagsfile.open(QFile::ReadOnly)) model=new QStringListModel(completer); | |
| QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); | |
| QStringList words; | |
| QString line; | |
| QTextStream tscompleter(&tagsfile); | |
| tscompleter.setCodec(codec); | |
| while (!tscompleter.atEnd()) | |
| { | |
| line = tscompleter.readLine(); | |
| if (!line.isEmpty()) words.append(line.remove("\n")); | |
| } | |
| if (userTagsfile.open(QFile::ReadOnly)) | |
| { | |
| QTextStream usertscompleter(&userTagsfile); | |
| usertscompleter.setCodec(codec); | |
| while (!usertscompleter.atEnd()) | |
| { | |
| line = usertscompleter.readLine(); | |
| if (!line.isEmpty()) words.append(line.remove("\n")); | |
| } | |
| } | |
| for (int i=0; i<userCompletionList.count();++i) | |
| { | |
| words.append(userCompletionList.at(i)); | |
| } | |
| words.removeDuplicates(); | |
| words.sort(); | |
| QApplication::restoreOverrideCursor(); | |
| model=new QStringListModel(words, completer); | |
| completer->setModel(model); | |
| completer->setModelSorting(QCompleter::CaseSensitivelySortedModel); | |
| completer->setCaseSensitivity(Qt::CaseSensitive); | |
| completer->setWrapAround(false); | |
| } | |
| void Texmaker::updateCompleter() | |
| { | |
| QStringList words; | |
| QString item; | |
| QStringList types,extraBibList,extraLabelList; | |
| types << QLatin1String("cite") << QLatin1String("nocite") << QLatin1String("footcite") | |
| << QLatin1String("citep") << QLatin1String("ref") | |
| << QLatin1String("pageref") << QLatin1String("eqref") | |
| << QLatin1String("autoref"); | |
| QRegExp macroName("\\\\("+types.join("|")+")\\{(.*)\\}", Qt::CaseInsensitive); | |
| macroName.setMinimal(true); | |
| for (int i=0; i<completer->model()->rowCount();++i) | |
| { | |
| item=completer->model()->data(completer->model()->index(i,0)).toString(); | |
| if (!item.contains(macroName)) {words.append(item);} | |
| } | |
| words.append("\\cite{"+QString(0x2022)+"}"); | |
| words.append("\\nocite{"+QString(0x2022)+"}"); | |
| words.append("\\footcite{"+QString(0x2022)+"}"); | |
| words.append("\\citep{"+QString(0x2022)+"}"); | |
| words.append("\\ref{"+QString(0x2022)+"}"); | |
| words.append("\\pageref{"+QString(0x2022)+"}"); | |
| words.append("\\eqref{"+QString(0x2022)+"}"); | |
| words.append("\\autoref{"+QString(0x2022)+"}"); | |
| for (int i=0; i<userCompletionList.count();++i) | |
| { | |
| if (userCompletionList.at(i).contains("#bib#")) extraBibList.append(userCompletionList.at(i)); | |
| if (userCompletionList.at(i).contains("#label#")) extraLabelList.append(userCompletionList.at(i)); | |
| } | |
| QAbstractItemModel *model; | |
| QString tag; | |
| for (int i=0; i<bibitem.count();++i) | |
| { | |
| words.append("\\nocite{"+bibitem.at(i)+"}"); | |
| words.append("\\cite{"+bibitem.at(i)+"}"); | |
| words.append("\\footcite{"+bibitem.at(i)+"}"); | |
| words.append("\\citep{"+bibitem.at(i)+"}"); | |
| for (int j=0; j<extraBibList.count();++j) | |
| { | |
| tag=extraBibList.at(j); | |
| tag.replace("#bib#",bibitem.at(i)); | |
| words.append(tag); | |
| } | |
| } | |
| for (int i=0; i<labelitem.count();++i) | |
| { | |
| words.append("\\ref{"+labelitem.at(i)+"}"); | |
| words.append("\\pageref{"+labelitem.at(i)+"}"); | |
| words.append("\\eqref{"+labelitem.at(i)+"}"); | |
| words.append("\\autoref{"+labelitem.at(i)+"}"); | |
| for (int j=0; j<extraLabelList.count();++j) | |
| { | |
| tag=extraLabelList.at(j); | |
| tag.replace("#label#",labelitem.at(i)); | |
| words.append(tag); | |
| } | |
| } | |
| for (int j=0; j<extraBibList.count();++j) | |
| { | |
| tag=extraBibList.at(j); | |
| tag.replace("#bib#",QString(0x2022)); | |
| words.removeOne(extraBibList.at(j)); | |
| words.append(tag); | |
| } | |
| for (int j=0; j<extraLabelList.count();++j) | |
| { | |
| tag=extraLabelList.at(j); | |
| tag.replace("#label#",QString(0x2022)); | |
| words.removeOne(extraLabelList.at(j)); | |
| words.append(tag); | |
| } | |
| words.removeDuplicates(); | |
| words.sort(); | |
| model=new QStringListModel(words, completer); | |
| completer->setModel(model); | |
| completer->setModelSorting(QCompleter::CaseSensitivelySortedModel); | |
| completer->setCaseSensitivity(Qt::CaseSensitive); | |
| completer->setWrapAround(false); | |
| } | |
| bool Texmaker::spelldicExist() | |
| { | |
| QString affdic=spell_dic.left(spell_dic.length()-4)+".aff"; | |
| QFileInfo fidic(spell_dic); | |
| QFileInfo fiaff(affdic); | |
| return (fidic.exists() && fidic.isReadable() && fiaff.exists() && fiaff.isReadable()); | |
| } | |
| void Texmaker::updateTranslation() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| QString lang=action->text(); | |
| TexmakerApp::instance()->language=lang; | |
| QMessageBox::information( this,"Texmaker",tr("The language setting will take effect after restarting the application.")); | |
| } | |
| void Texmaker::updateAppearance() | |
| { | |
| QAction *action = qobject_cast<QAction *>(sender()); | |
| QString style=action->text(); | |
| modern_style=(action->text()=="Modern"); | |
| QMessageBox::information( this,"Texmaker",tr("The appearance setting will take effect after restarting the application.")); | |
| } | |
| void Texmaker::disableToolsActions() | |
| { | |
| QList<QAction *> listaction; | |
| listaction << toolMenu->actions(); | |
| listaction << user12Menu->actions(); | |
| //listaction << optionsMenu->actions(); | |
| listaction << runToolBar->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action=iterator.next(); | |
| action->setEnabled(false); | |
| } | |
| QTimer::singleShot(5000,this, SLOT(enableToolsActions())); | |
| } | |
| void Texmaker::enableToolsActions() | |
| { | |
| QList<QAction *> listaction; | |
| listaction << toolMenu->actions(); | |
| listaction << user12Menu->actions(); | |
| //listaction << optionsMenu->actions(); | |
| listaction << runToolBar->actions(); | |
| QListIterator<QAction*> iterator(listaction); | |
| while ( iterator.hasNext() ) | |
| { | |
| QAction *action=iterator.next(); | |
| action->setEnabled(true); | |
| } | |
| } | |
| void Texmaker::clipboardDataChanged() | |
| { | |
| if ( !currentEditorView() ) return; | |
| PasteAct->setEnabled(!QApplication::clipboard()->text().isEmpty()); | |
| } | |
| void Texmaker::refreshAll() | |
| { | |
| if ( !currentEditorView() ) return; | |
| disconnect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| currentEditorView()->editor->highlighter->rehighlight(); | |
| UpdateStructure(); | |
| connect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| } | |
| void Texmaker::refreshAllFromCursor(int newnumlines) | |
| { | |
| disconnect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| int oldnumlines=currentEditorView()->editor->getLastNumLines(); | |
| int delta=newnumlines-oldnumlines; | |
| QTextBlock p = currentEditorView()->editor->textCursor().block(); | |
| int currentline=p.blockNumber(); | |
| int i=currentline-1; | |
| QList<int> start,end; | |
| /* QMapIterator<int, int> it(currentEditorView()->editor->foldedLines); | |
| while (it.hasNext()) { | |
| it.next(); | |
| qDebug() << "avant folded" << it.key() << ":" << it.value(); | |
| }*/ | |
| while (p.isValid()) | |
| { | |
| if (currentEditorView()->editor->foldedLines.keys().contains(i)) | |
| { | |
| start.append(i+delta); | |
| end.append(currentEditorView()->editor->foldedLines[i]+delta); | |
| currentEditorView()->editor->foldedLines.remove(i); | |
| } | |
| i++; | |
| p = p.next(); | |
| } | |
| for (int i =0; i <start.count(); i++) currentEditorView()->editor->foldedLines.insert(start[i],end[i]); | |
| /* QMapIterator<int, int> itbis(currentEditorView()->editor->foldedLines); | |
| while (itbis.hasNext()) { | |
| itbis.next(); | |
| qDebug() << "apres folded" << itbis.key() << ":" << itbis.value(); | |
| } | |
| qDebug() << "**********";*/ | |
| /*QList<int> listofmodifiedlines; | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| for (int j = 0; j < structure.count(); j++) | |
| { | |
| l=structure.at(j).line; | |
| if (l>=currentline) | |
| { | |
| listofmodifiedlines.append(l+delta); | |
| } | |
| } | |
| int i=currentline; | |
| while (p.isValid()) | |
| { | |
| if (listofmodifiedlines.contains(i)) | |
| { | |
| currentEditorView()->editor->highlighter->rehighlightBlock(p); | |
| } | |
| i++; | |
| p = p.next(); | |
| } | |
| refreshRange(); | |
| //UpdateStructure();*/ | |
| connect(currentEditorView()->editor, SIGNAL(requestUpdateStructure()), this, SLOT(UpdateStructure())); | |
| refreshRange(); | |
| currentEditorView()->editor->setLastNumLines(newnumlines); | |
| } | |
| void Texmaker::refreshRange() | |
| { | |
| currentEditorView()->editor->foldableLines.clear(); | |
| int endpreamble = currentEditorView()->editor->searchLine("\\begin{document}"); | |
| if (endpreamble>1) currentEditorView()->editor->foldableLines.insert(0,endpreamble-1); | |
| int nb=StructureTreeWidget->topLevelItemCount(); | |
| if (nb>0) | |
| { | |
| for (int i = 0; i < nb; i++) | |
| { | |
| ParseTree(StructureTreeWidget->topLevelItem(i)); | |
| } | |
| } | |
| currentEditorView()->editor->matchAll(); | |
| } | |
| void Texmaker::jumpToStructure(int line) | |
| { | |
| const QList<StructItem>& structure = currentEditorView()->editor->getStructItems(); | |
| int index=-1; | |
| for (int j = 0; j < structure.count(); j++) | |
| { | |
| if (structure.at(j).cursor.block().blockNumber()==line) {index=j; break;} | |
| } | |
| if (index<0) return; | |
| QList<QTreeWidgetItem *> fItems=StructureTreeWidget->findItems (structure.at(index).item,Qt::MatchRecursive,0); | |
| if (fItems.size()>0 ) | |
| { | |
| for (int i = 0; i< fItems.size(); i++) | |
| { | |
| if ((fItems.at(i)) && (fItems.at(i)->text(1)==QString::number(index))) | |
| { | |
| StructureTreeWidget->scrollToItem(fItems.at(i),QAbstractItemView::EnsureVisible); | |
| StructureTreeWidget->setCurrentItem(fItems.at(i)); | |
| } | |
| } | |
| } | |
| } | |
| void Texmaker::mainWindowActivated() | |
| { | |
| if (watchfiles) QTimer::singleShot(0, this, SLOT(checkModifiedOutsideAll())); | |
| } | |
| void Texmaker::ToggleStructurePanel() | |
| { | |
| ShowStructView(true); | |
| } | |
| void Texmaker::ToggleLogPanel() | |
| { | |
| ShowOutputView(true); | |
| } | |
| void Texmaker::TogglePdfPanel() | |
| { | |
| ShowPdfView(true); | |
| } | |
| void Texmaker::ToggleSourcePanel() | |
| { | |
| ShowSourceView(true); | |
| } | |
| void Texmaker::ToggleFilesPanel() | |
| { | |
| ShowFilesView(true); | |
| } | |
| void Texmaker::ShowStructView(bool change) | |
| { | |
| int pos=0; | |
| QTextCursor cur; | |
| if (currentEditorView() ) | |
| { | |
| cur=currentEditorView()->editor->textCursor(); | |
| pos=cur.position(); | |
| } | |
| if (change) showstructview=!showstructview; | |
| if (showstructview) | |
| { | |
| splitter3->show(); | |
| //LeftPanelFrameBis->show(); | |
| } | |
| else | |
| { | |
| splitter3->hide(); | |
| //LeftPanelFrameBis->hide(); | |
| if (currentEditorView()) | |
| { | |
| cur.setPosition(pos,QTextCursor::MoveAnchor); | |
| currentEditorView()->editor->setTextCursor(cur); | |
| currentEditorView()->editor->setFocus(); | |
| } | |
| } | |
| ViewStructurePanelAct->setChecked(showstructview); | |
| toggleStructureButton->setEnabled(showstructview); | |
| } | |
| void Texmaker::ShowOutputView(bool change) | |
| { | |
| if (change) showoutputview=!showoutputview; | |
| if (showoutputview) | |
| { | |
| Outputframe->show(); | |
| splitter2Changed(); | |
| if (currentEditorView()) QTimer::singleShot(10,currentEditorView()->editor, SLOT(setCursorVisible())); | |
| } | |
| else | |
| { | |
| Outputframe->hide(); | |
| } | |
| ViewLogPanelAct->setChecked(showoutputview); | |
| toggleLogButton->setEnabled(showoutputview); | |
| } | |
| void Texmaker::ShowPdfView(bool change) | |
| { | |
| disconnect(ViewPdfPanelAct, SIGNAL(triggered()), this, SLOT(TogglePdfPanel())); | |
| disconnect(togglePdfButton, SIGNAL( clicked() ), this, SLOT(TogglePdfPanel() ) ); | |
| disconnect(ViewSourcePanelAct, SIGNAL(triggered()), this, SLOT(ToggleSourcePanel())); | |
| disconnect(toggleSourceButton, SIGNAL( clicked() ), this, SLOT(ToggleSourcePanel() ) ); | |
| if (change) showpdfview=!showpdfview; | |
| if (showpdfview) | |
| { | |
| sourceviewerWidget->hide(); | |
| if (pdfviewerWidget) StackedViewers->setCurrentWidget(pdfviewerWidget); | |
| StackedViewers->show(); | |
| showsourceview=false; | |
| ViewSourcePanelAct->setChecked(showsourceview); | |
| toggleSourceButton->setEnabled(showsourceview); | |
| } | |
| else | |
| { | |
| StackedViewers->hide(); | |
| } | |
| ViewPdfPanelAct->setChecked(showpdfview); | |
| togglePdfButton->setEnabled(showpdfview); | |
| connect(ViewPdfPanelAct, SIGNAL(triggered()), this, SLOT(TogglePdfPanel())); | |
| connect(togglePdfButton, SIGNAL( clicked() ), this, SLOT(TogglePdfPanel() ) ); | |
| connect(ViewSourcePanelAct, SIGNAL(triggered()), this, SLOT(ToggleSourcePanel())); | |
| connect(toggleSourceButton, SIGNAL( clicked() ), this, SLOT(ToggleSourcePanel() ) ); | |
| } | |
| void Texmaker::ShowSourceView(bool change) | |
| { | |
| disconnect(ViewPdfPanelAct, SIGNAL(triggered()), this, SLOT(TogglePdfPanel())); | |
| disconnect(togglePdfButton, SIGNAL( clicked() ), this, SLOT(TogglePdfPanel() ) ); | |
| disconnect(ViewSourcePanelAct, SIGNAL(triggered()), this, SLOT(ToggleSourcePanel())); | |
| disconnect(toggleSourceButton, SIGNAL( clicked() ), this, SLOT(ToggleSourcePanel() ) ); | |
| if (change) showsourceview=!showsourceview; | |
| if (showsourceview) | |
| { | |
| StackedViewers->setCurrentWidget(sourceviewerWidget); | |
| sourceviewerWidget->show(); | |
| StackedViewers->show(); | |
| showpdfview=false; | |
| ViewPdfPanelAct->setChecked(showpdfview); | |
| togglePdfButton->setEnabled(showpdfview); | |
| } | |
| else | |
| { | |
| StackedViewers->hide(); | |
| } | |
| ViewSourcePanelAct->setChecked(showsourceview); | |
| toggleSourceButton->setEnabled(showsourceview); | |
| connect(ViewPdfPanelAct, SIGNAL(triggered()), this, SLOT(TogglePdfPanel())); | |
| connect(togglePdfButton, SIGNAL( clicked() ), this, SLOT(TogglePdfPanel() ) ); | |
| connect(ViewSourcePanelAct, SIGNAL(triggered()), this, SLOT(ToggleSourcePanel())); | |
| connect(toggleSourceButton, SIGNAL( clicked() ), this, SLOT(ToggleSourcePanel() ) ); | |
| } | |
| void Texmaker::ShowFilesView(bool change) | |
| { | |
| if (change) showfilesview=!showfilesview; | |
| if (showfilesview) | |
| { | |
| OpenedFilesListWidget->show(); | |
| } | |
| else | |
| { | |
| OpenedFilesListWidget->hide(); | |
| } | |
| ViewOpenedFilesPanelAct->setChecked(showfilesview); | |
| } | |
| void Texmaker::ToggleFullScreen() | |
| { | |
| if(FullScreenAct->isChecked()) | |
| { | |
| windowstate=saveState(0); | |
| setWindowState(Qt::WindowFullScreen); | |
| restoreState(fullscreenstate,1); | |
| } | |
| else | |
| { | |
| fullscreenstate=saveState(1); | |
| setWindowState(Qt::WindowNoState); | |
| restoreState(windowstate,0); | |
| } | |
| } | |
| void Texmaker::EditUserCompletion() | |
| { | |
| UserCompletionDialog *ucDlg = new UserCompletionDialog(this,userCompletionList); | |
| QTextCodec *codec = QTextCodec::codecForName("UTF-8"); | |
| QFile tagsfile(":/completion/completion.txt"); | |
| if (tagsfile.open(QFile::ReadOnly)) | |
| { | |
| QTextStream tscompleter(&tagsfile); | |
| tscompleter.setCodec(codec); | |
| ucDlg->ui.plainTextEdit->setPlainText( tscompleter.readAll() ); | |
| } | |
| if ( ucDlg->exec() ) | |
| { | |
| userCompletionList=ucDlg->userlist; | |
| initCompleter(); | |
| updateCompleter(); | |
| if (currentEditorView()) | |
| { | |
| if (completion) currentEditorView()->editor->setCompleter(completer); | |
| else currentEditorView()->editor->setCompleter(0); | |
| currentEditorView()->editor->matchAll(); | |
| } | |
| } | |
| } | |
| void Texmaker::addBibFiles(QString param) | |
| { | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| QString name=fi.absoluteFilePath(); | |
| QString flname=fi.fileName(); | |
| QString basename=name.left(name.length()-flname.length()); | |
| QString fname; | |
| QStringList fl=param.split(","); | |
| for (int i = 0; i< fl.count(); i++) | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)==".bib") fname=basename+fname; | |
| else fname=basename+fname+".bib"; | |
| QFileInfo fi(fname); | |
| if (fi.exists() && fi.isReadable()) listbibfiles.append(fname); | |
| else | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)!=".bib") fname=fname+".bib"; | |
| QFileInfo fi(fname); | |
| if (fi.isAbsolute() && fi.exists() && fi.isReadable()) listbibfiles.append(fname); | |
| } | |
| } | |
| } | |
| void Texmaker::addIncludeFiles(QString param) | |
| { | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| QString name=fi.absoluteFilePath(); | |
| QString flname=fi.fileName(); | |
| QString basename=name.left(name.length()-flname.length()); | |
| QString fname; | |
| QStringList fl=param.split(","); | |
| for (int i = 0; i< fl.count(); i++) | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)==".tex") fname=basename+fname; | |
| else fname=basename+fname+".tex"; | |
| QFileInfo fi(fname); | |
| if (fi.exists() && fi.isReadable()) listchildfiles.append(fname); | |
| else | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)!=".tex") fname=fname+".tex"; | |
| QFileInfo fi(fname); | |
| if (fi.isAbsolute() && fi.exists() && fi.isReadable()) listchildfiles.append(fname); | |
| } | |
| } | |
| } | |
| void Texmaker::loadIncludeFiles(QString param, QString extension) | |
| { | |
| QString finame; | |
| if (singlemode) {finame=getName();} | |
| else {finame=MasterName;} | |
| QFileInfo fi(finame); | |
| QString name=fi.absoluteFilePath(); | |
| QString flname=fi.fileName(); | |
| QString basename=name.left(name.length()-flname.length()); | |
| QString fname; | |
| QStringList fl=param.split(","); | |
| for (int i = 0; i< fl.count(); i++) | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)==extension) fname=basename+fname; | |
| else fname=basename+fname+extension; | |
| QFileInfo fi(fname); | |
| if (fi.exists() && fi.isReadable()) load(fname); | |
| else | |
| { | |
| fname=fl.at(i); | |
| if (fname.right(4)!=extension) fname=fname+extension; | |
| QFileInfo fi(fname); | |
| if (fi.isAbsolute() && fi.exists() && fi.isReadable()) load(fname); | |
| } | |
| } | |
| } | |
| void Texmaker::showCursorPos(int li, int col) | |
| { | |
| QString linenumber; | |
| if (col>0) linenumber.sprintf("L: %d C: %d", li,col); | |
| else linenumber.sprintf("L: %d C: %d", li,1); | |
| posLabel->setText(linenumber); | |
| } | |
| void Texmaker::keyPressEvent(QKeyEvent *event) | |
| { | |
| if ((event->key() == Qt::Key_Escape) && showoutputview) | |
| { | |
| ShowOutputView(true); | |
| } | |
| else QMainWindow::keyPressEvent(event); | |
| } | |
| void Texmaker::customContentsMenuStructure( const QPoint &pos ) | |
| { | |
| QMenu *menu = QMainWindow::createPopupMenu(); | |
| menu->addSeparator(); | |
| viewPstricksAct->setChecked(showPstricks); | |
| menu->addAction(viewPstricksAct); | |
| viewMpAct->setChecked(showMp); | |
| menu->addAction(viewMpAct); | |
| viewTikzAct->setChecked(showTikz); | |
| menu->addAction(viewTikzAct); | |
| viewAsyAct->setChecked(showAsy); | |
| menu->addAction(viewAsyAct); | |
| QPoint globalPos = LeftPanelToolBar->mapToGlobal(pos); | |
| menu->exec( globalPos ); | |
| } | |
| void Texmaker::TogglePstricks() | |
| { | |
| if (showPstricks) | |
| { | |
| if (LeftPanelToolBar->actions().contains(pstricksAct)) LeftPanelToolBar->removeAction(pstricksAct); | |
| } | |
| else if (!LeftPanelToolBar->actions().contains(pstricksAct)) LeftPanelToolBar->addAction(pstricksAct); | |
| showPstricks=!showPstricks; | |
| } | |
| void Texmaker::ToggleMetapost() | |
| { | |
| if (showMp) | |
| { | |
| if (LeftPanelToolBar->actions().contains(mpAct)) LeftPanelToolBar->removeAction(mpAct); | |
| } | |
| else if (!LeftPanelToolBar->actions().contains(mpAct)) LeftPanelToolBar->addAction(mpAct); | |
| showMp=!showMp; | |
| } | |
| void Texmaker::ToggleTikz() | |
| { | |
| if (showTikz) | |
| { | |
| if (LeftPanelToolBar->actions().contains(tikzAct)) LeftPanelToolBar->removeAction(tikzAct); | |
| } | |
| else if (!LeftPanelToolBar->actions().contains(tikzAct)) LeftPanelToolBar->addAction(tikzAct); | |
| showTikz=!showTikz; | |
| } | |
| void Texmaker::ToggleAsymptote() | |
| { | |
| if (showAsy) | |
| { | |
| if (LeftPanelToolBar->actions().contains(asyAct)) LeftPanelToolBar->removeAction(asyAct); | |
| } | |
| else if (!LeftPanelToolBar->actions().contains(asyAct)) LeftPanelToolBar->addAction(asyAct); | |
| showAsy=!showAsy; | |
| } | |
| void Texmaker::customContentsMenuMain( const QPoint &pos ) | |
| { | |
| QMenu *menu = QMainWindow::createPopupMenu(); | |
| menu->addSeparator(); | |
| showemphasisAct->setChecked(showEmphasis); | |
| menu->addAction(showemphasisAct); | |
| shownewlineAct->setChecked(showNewline); | |
| menu->addAction(shownewlineAct); | |
| showmathmodeAct->setChecked(showMathmode); | |
| menu->addAction(showmathmodeAct); | |
| showindiceAct->setChecked(showIndice); | |
| menu->addAction(showindiceAct); | |
| showpuissanceAct->setChecked(showPuissance); | |
| menu->addAction(showpuissanceAct); | |
| showsmallfracAct->setChecked(showSmallfrac); | |
| menu->addAction(showsmallfracAct); | |
| showdfracAct->setChecked(showDfrac); | |
| menu->addAction(showdfracAct); | |
| showracineAct->setChecked(showRacine); | |
| menu->addAction(showracineAct); | |
| QPoint globalPos = centralToolBar->mapToGlobal(pos); | |
| menu->exec( globalPos ); | |
| } | |
| void Texmaker::ToggleEmphasis() | |
| { | |
| if (showEmphasis) | |
| { | |
| if (centralToolBar->actions().contains(emphasisAct)) centralToolBar->removeAction(emphasisAct); | |
| } | |
| else if (!centralToolBar->actions().contains(emphasisAct)) centralToolBar->addAction(emphasisAct); | |
| showEmphasis=!showEmphasis; | |
| } | |
| void Texmaker::ToggleNewline() | |
| { | |
| if (showNewline) | |
| { | |
| if (centralToolBar->actions().contains(newlineAct)) centralToolBar->removeAction(newlineAct); | |
| } | |
| else if (!centralToolBar->actions().contains(newlineAct)) centralToolBar->addAction(newlineAct); | |
| showNewline=!showNewline; | |
| } | |
| void Texmaker::ToggleMathmode() | |
| { | |
| if (showMathmode) | |
| { | |
| if (centralToolBar->actions().contains(mathmodeAct)) centralToolBar->removeAction(mathmodeAct); | |
| } | |
| else if (!centralToolBar->actions().contains(mathmodeAct)) centralToolBar->addAction(mathmodeAct); | |
| showMathmode=!showMathmode; | |
| } | |
| void Texmaker::ToggleIndice() | |
| { | |
| if (showIndice) | |
| { | |
| if (centralToolBar->actions().contains(indiceAct)) centralToolBar->removeAction(indiceAct); | |
| } | |
| else if (!centralToolBar->actions().contains(indiceAct)) centralToolBar->addAction(indiceAct); | |
| showIndice=!showIndice; | |
| } | |
| void Texmaker::TogglePuissance() | |
| { | |
| if (showPuissance) | |
| { | |
| if (centralToolBar->actions().contains(puissanceAct)) centralToolBar->removeAction(puissanceAct); | |
| } | |
| else if (!centralToolBar->actions().contains(puissanceAct)) centralToolBar->addAction(puissanceAct); | |
| showPuissance=!showPuissance; | |
| } | |
| void Texmaker::ToggleSmallfrac() | |
| { | |
| if (showSmallfrac) | |
| { | |
| if (centralToolBar->actions().contains(smallfracAct)) centralToolBar->removeAction(smallfracAct); | |
| } | |
| else if (!centralToolBar->actions().contains(smallfracAct)) centralToolBar->addAction(smallfracAct); | |
| showSmallfrac=!showSmallfrac; | |
| } | |
| void Texmaker::ToggleDfrac() | |
| { | |
| if (showDfrac) | |
| { | |
| if (centralToolBar->actions().contains(dfracAct)) centralToolBar->removeAction(dfracAct); | |
| } | |
| else if (!centralToolBar->actions().contains(dfracAct)) centralToolBar->addAction(dfracAct); | |
| showDfrac=!showDfrac; | |
| } | |
| void Texmaker::ToggleRacine() | |
| { | |
| if (showRacine) | |
| { | |
| if (centralToolBar->actions().contains(racineAct)) centralToolBar->removeAction(racineAct); | |
| } | |
| else if (!centralToolBar->actions().contains(racineAct)) centralToolBar->addAction(racineAct); | |
| showRacine=!showRacine; | |
| } | |
| void Texmaker::splitter2Changed() | |
| { | |
| QFontMetrics fm(qApp->font()); | |
| if (OutputTableWidget->isVisible()) OutputTextEdit->setMaximumHeight(5*(fm.lineSpacing()+4)); | |
| else | |
| { | |
| if (splitter2->sizes().at(1)>0) OutputTextEdit->setMaximumHeight(splitter2->sizes().at(1)); | |
| else OutputTextEdit->setMaximumHeight(splitter2->sizes().at(0)); | |
| } | |
| } | |
| void Texmaker::SaveSession() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QString currentDir=QDir::homePath(); | |
| if (!lastDocument.isEmpty()) | |
| { | |
| QFileInfo fi(lastDocument); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getSaveFileName(this,tr("Save"),currentDir,"Texmaker session (*.tks);;All files (*.*)"); | |
| if ( !fn.isEmpty() ) | |
| { | |
| if (!fn.contains('.')) fn += ".tks"; | |
| QFile fic(fn); | |
| if (!fic.open(QIODevice::WriteOnly)) | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("The file could not be saved. Please check if you have write permission.")); | |
| return; | |
| } | |
| QDomDocument doc; | |
| QDomProcessingInstruction instr = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); | |
| doc.appendChild(instr); | |
| QDomElement root=doc.createElement("TexmakerSession"); | |
| root.setAttribute("quickmode",QString::number(quickmode)); | |
| doc.appendChild(root); | |
| QDomElement element; | |
| FilesMap::Iterator itf; | |
| QString docname; | |
| for( itf = filenames.begin(); itf != filenames.end(); ++itf ) | |
| { | |
| docname=filenames[itf.key()]; | |
| if (!docname.startsWith("untitled")) | |
| { | |
| element=doc.createElement("document"); | |
| element.setAttribute("file",docname); | |
| element.setAttribute("line",QString::number(itf.key()->editor->textCursor().blockNumber())); | |
| element.setAttribute("bookmark1",QString::number(itf.key()->editor->UserBookmark[0])); | |
| element.setAttribute("bookmark2",QString::number(itf.key()->editor->UserBookmark[1])); | |
| element.setAttribute("bookmark3",QString::number(itf.key()->editor->UserBookmark[2])); | |
| if ((!singlemode) && (MasterName==docname)) element.setAttribute("master","true"); | |
| else element.setAttribute("master","false"); | |
| if (itf.key()==currentEditorView()) element.setAttribute("hasfocus","true"); | |
| else element.setAttribute("hasfocus","false"); | |
| root.appendChild(element); | |
| } | |
| } | |
| QTextStream out (&fic); | |
| doc.save(out,4); | |
| fic.close(); | |
| } | |
| } | |
| void Texmaker::LoadSession() | |
| { | |
| QString currentDir=QDir::homePath(); | |
| if (!lastDocument.isEmpty()) | |
| { | |
| QFileInfo fi(lastDocument); | |
| if (fi.exists() && fi.isReadable()) currentDir=fi.absolutePath(); | |
| } | |
| QString fn = QFileDialog::getOpenFileName(this,tr("Open File"),currentDir,"Texmaker session (*.tks);;All files (*.*)"); | |
| if (fn.isEmpty()) return; | |
| LoadSessionFile(fn); | |
| } | |
| void Texmaker::LoadSessionFile(const QString &fn) | |
| { | |
| QFile fic( fn ); | |
| if ( !fic.open( QIODevice::ReadOnly ) ) | |
| { | |
| QMessageBox::warning( this,tr("Error"), tr("You do not have read permission to this file.")); | |
| return; | |
| } | |
| QDomDocument doc; | |
| if (!doc.setContent(&fic)) | |
| { | |
| fic.close(); | |
| return; | |
| } | |
| QDomElement root = doc.documentElement(); | |
| if (root.tagName() != "TexmakerSession") | |
| { | |
| fic.close(); | |
| return; | |
| } | |
| if (root.hasAttribute("quickmode")) quickmode=root.attribute("quickmode").toInt(); | |
| QString file, ofile; | |
| int b1, b2, b3, l, ob1, ob2, ob3, ol; | |
| bool ma, oma; | |
| bool fo=false; | |
| QDomElement element = root.firstChildElement(); | |
| if (!singlemode) ToggleMode(); | |
| while (!element.isNull()) | |
| { | |
| b1=0; | |
| b2=0; | |
| b3=0; | |
| l=0; | |
| ma=false; | |
| file=""; | |
| if (element.hasAttribute("file")) | |
| { | |
| file=element.attribute("file"); | |
| if (element.hasAttribute("line")) l=element.attribute("line").toInt(); | |
| if (element.hasAttribute("bookmark1")) b1=element.attribute("bookmark1").toInt(); | |
| if (element.hasAttribute("bookmark2")) b2=element.attribute("bookmark2").toInt(); | |
| if (element.hasAttribute("bookmark3")) b3=element.attribute("bookmark3").toInt(); | |
| if (element.hasAttribute("master")) ma=(element.attribute("master")=="true"); | |
| if (element.hasAttribute("hasfocus")) fo=(element.attribute("hasfocus")=="true"); | |
| if (fo) | |
| { | |
| ofile=file; | |
| ol=l; | |
| ob1=b1; | |
| ob2=b2; | |
| ob3=b3; | |
| oma=ma; | |
| } | |
| else | |
| { | |
| fileOpenAndGoto(file,l+1,false); | |
| if (currentEditorView() && getName()==file) | |
| { | |
| currentEditorView()->editor->UserBookmark[0]=b1; | |
| currentEditorView()->editor->UserBookmark[1]=b2; | |
| currentEditorView()->editor->UserBookmark[2]=b3; | |
| currentEditorView()->update(); | |
| if (singlemode && ma) ToggleMode(); | |
| } | |
| } | |
| } | |
| element=element.nextSiblingElement(); | |
| } | |
| fic.close(); | |
| if (!ofile.isEmpty()) | |
| { | |
| fileOpenAndGoto(ofile,l+1,true); | |
| if (currentEditorView() && getName()==ofile) | |
| { | |
| currentEditorView()->editor->UserBookmark[0]=ob1; | |
| currentEditorView()->editor->UserBookmark[1]=ob2; | |
| currentEditorView()->editor->UserBookmark[2]=ob3; | |
| currentEditorView()->update(); | |
| if (singlemode && oma) ToggleMode(); | |
| } | |
| } | |
| } | |
| void Texmaker::SaveLastSession() | |
| { | |
| if ( !currentEditorView() ) return; | |
| QFile fic(sessionTempFile); | |
| if (!fic.open(QIODevice::WriteOnly)) | |
| { | |
| return; | |
| } | |
| QDomDocument doc; | |
| QDomProcessingInstruction instr = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); | |
| doc.appendChild(instr); | |
| QDomElement root=doc.createElement("TexmakerSession"); | |
| root.setAttribute("quickmode",QString::number(quickmode)); | |
| doc.appendChild(root); | |
| QDomElement element; | |
| FilesMap::Iterator itf; | |
| QString docname; | |
| for( itf = filenames.begin(); itf != filenames.end(); ++itf ) | |
| { | |
| docname=filenames[itf.key()]; | |
| if (!docname.startsWith("untitled")) | |
| { | |
| element=doc.createElement("document"); | |
| element.setAttribute("file",docname); | |
| element.setAttribute("line",QString::number(itf.key()->editor->textCursor().blockNumber())); | |
| element.setAttribute("bookmark1",QString::number(itf.key()->editor->UserBookmark[0])); | |
| element.setAttribute("bookmark2",QString::number(itf.key()->editor->UserBookmark[1])); | |
| element.setAttribute("bookmark3",QString::number(itf.key()->editor->UserBookmark[2])); | |
| if ((!singlemode) && (MasterName==docname)) element.setAttribute("master","true"); | |
| else element.setAttribute("master","false"); | |
| if (itf.key()==currentEditorView()) element.setAttribute("hasfocus","true"); | |
| else element.setAttribute("hasfocus","false"); | |
| root.appendChild(element); | |
| } | |
| } | |
| QTextStream out (&fic); | |
| doc.save(out,4); | |
| fic.close(); | |
| } | |
| void Texmaker::LoadLastSession() | |
| { | |
| QFileInfo fi(sessionTempFile); | |
| if (!fi.exists()) return; | |
| QFile fic( sessionTempFile ); | |
| if ( !fic.open( QIODevice::ReadOnly ) ) | |
| { | |
| QMessageBox::warning( this,tr("Error"), tr("You do not have read permission to this file.")); | |
| return; | |
| } | |
| QDomDocument doc; | |
| if (!doc.setContent(&fic)) | |
| { | |
| fic.close(); | |
| return; | |
| } | |
| QDomElement root = doc.documentElement(); | |
| if (root.tagName() != "TexmakerSession") | |
| { | |
| fic.close(); | |
| return; | |
| } | |
| if (root.hasAttribute("quickmode")) quickmode=root.attribute("quickmode").toInt(); | |
| QString file, ofile; | |
| int b1, b2, b3, l, ob1, ob2, ob3, ol; | |
| bool ma, oma; | |
| bool fo=false; | |
| QDomElement element = root.firstChildElement(); | |
| if (!singlemode) ToggleMode(); | |
| while (!element.isNull()) | |
| { | |
| b1=0; | |
| b2=0; | |
| b3=0; | |
| l=0; | |
| ma=false; | |
| file=""; | |
| if (element.hasAttribute("file")) | |
| { | |
| file=element.attribute("file"); | |
| if (element.hasAttribute("line")) l=element.attribute("line").toInt(); | |
| if (element.hasAttribute("bookmark1")) b1=element.attribute("bookmark1").toInt(); | |
| if (element.hasAttribute("bookmark2")) b2=element.attribute("bookmark2").toInt(); | |
| if (element.hasAttribute("bookmark3")) b3=element.attribute("bookmark3").toInt(); | |
| if (element.hasAttribute("master")) ma=(element.attribute("master")=="true"); | |
| if (element.hasAttribute("hasfocus")) fo=(element.attribute("focus")=="true"); | |
| if (fo) | |
| { | |
| ofile=file; | |
| ol=l; | |
| ob1=b1; | |
| ob2=b2; | |
| ob3=b3; | |
| oma=ma; | |
| } | |
| else | |
| { | |
| fileOpenAndGoto(file,l+1,false); | |
| if (currentEditorView() && getName()==file) | |
| { | |
| currentEditorView()->editor->UserBookmark[0]=b1; | |
| currentEditorView()->editor->UserBookmark[1]=b2; | |
| currentEditorView()->editor->UserBookmark[2]=b3; | |
| currentEditorView()->update(); | |
| if (singlemode && ma) ToggleMode(); | |
| } | |
| } | |
| } | |
| element=element.nextSiblingElement(); | |
| } | |
| fic.close(); | |
| if (!ofile.isEmpty()) | |
| { | |
| fileOpenAndGoto(ofile,l+1,true); | |
| if (currentEditorView() && getName()==ofile) | |
| { | |
| currentEditorView()->editor->UserBookmark[0]=ob1; | |
| currentEditorView()->editor->UserBookmark[1]=ob2; | |
| currentEditorView()->editor->UserBookmark[2]=ob3; | |
| currentEditorView()->update(); | |
| if (singlemode && oma) ToggleMode(); | |
| } | |
| } | |
| } | |
| bool Texmaker::copyFile(QString origin,QString destination) | |
| { | |
| if (destination.isEmpty() || origin.isEmpty()) return false; | |
| QFileInfo fi_or(origin); | |
| if (!fi_or.exists()) return false; | |
| QFile file_or(origin); | |
| QFileInfo fi_dest(destination); | |
| if (fi_dest.exists()) | |
| { | |
| QFile file_dest(destination); | |
| file_dest.remove(); | |
| file_or.copy(destination); | |
| } | |
| else | |
| { | |
| file_or.copy(destination); | |
| } | |
| return true; | |
| } | |
| // void Texmaker::removeDir(QDir thedir) | |
| // { | |
| // QString name=thedir.dirName(); | |
| // QDirIterator iterator(thedir,QDirIterator::NoIteratorFlags); | |
| // while(iterator.hasNext()) | |
| // { | |
| // QString entry(iterator.next()); | |
| // if(!QFileInfo(entry).isDir()) | |
| // { | |
| // if (QFile::exists(entry)) | |
| // { | |
| // QFile file(entry); | |
| // file.open( QIODevice::ReadOnly ); | |
| // file.remove(); | |
| // } | |
| // } | |
| // } | |
| // thedir.cdUp(); | |
| // thedir.rmdir(name); | |
| // } | |
| void Texmaker::createBuildSubdirectory(QString fn) | |
| { | |
| if (fn.isEmpty() || fn.startsWith("untitled")) return; | |
| QFileInfo fi(fn); | |
| if (!fi.exists()) return; | |
| QDir basedir(fi.absolutePath()); | |
| QDir outputdir(fi.absolutePath()+"/build"); | |
| if (outputdir.exists()) return; | |
| basedir.mkdir("build"); | |
| } | |
| QString Texmaker::outputName(QString finame,QString extension) | |
| { | |
| return outputBaseName(finame)+extension; | |
| } | |
| QString Texmaker::outputBaseName(QString finame) | |
| { | |
| QString name=""; | |
| QFileInfo fi(finame); | |
| QString path=fi.absolutePath(); | |
| QString fn=fi.fileName(); | |
| if (useoutputdir) name=path+"/build/"+fn; | |
| else name=fi.absoluteFilePath(); | |
| QString ext=fi.suffix(); | |
| QString basename=name.left(name.length()-ext.length()-1); | |
| return basename; | |
| } | |
| bool Texmaker::gtkSession() | |
| { | |
| bool result=false; | |
| #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) | |
| result=true;// 1 : no kde ; 2: kde ; 3 : kde4 ; | |
| QString kdesession= ::getenv("KDE_FULL_SESSION"); | |
| QString kdeversion= ::getenv("KDE_SESSION_VERSION"); | |
| if (!kdesession.isEmpty()) result=false; | |
| if (!kdeversion.isEmpty()) result=false; | |
| #endif | |
| return result; | |
| } | |
| void Texmaker::setMasterDocument(const QString &fn) | |
| { | |
| if (singlemode && currentEditorView()) | |
| { | |
| MasterName=fn; | |
| if (MasterName.startsWith("untitled") || MasterName=="") | |
| { | |
| QMessageBox::warning( this,tr("Error"),tr("Could not start the command.")); | |
| return; | |
| } | |
| QFileInfo fi(MasterName); | |
| if (fi.exists() && fi.isReadable()) | |
| { | |
| QString shortName = MasterName; | |
| int pos; | |
| while ( (pos = (int)shortName.indexOf('/')) != -1 ) shortName.remove(0,pos+1); | |
| ToggleAct->setText(tr("Normal Mode (current master document :")+shortName+")"); | |
| singlemode=false; | |
| stat1->setText(QString(" %1 ").arg(tr("Master Document :")+shortName)); | |
| ToggleDocAct->setEnabled(true); | |
| UpdateStructure(); | |
| UpdateBibliography(); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment