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