22
24
#include "mainwindow.h"
24
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
28
#include "printoptionswidget.h"
29
#include "miscellaneous.h"
31
#include "settingsdialog.h"
32
#include "recentlyusedmenu.h"
33
#include "bookmarkmenu.h"
35
MainWindow::MainWindow(const QString& instanceName, QWidget* parent) : QMainWindow(parent)
37
setObjectName(instanceName);
29
m_settings = new QSettings(this);
31
if(m_settings->contains("mainWindow/iconTheme"))
33
QIcon::setThemeName(m_settings->value("mainWindow/iconTheme").toString());
36
if(m_settings->contains("mainWindow/styleSheet"))
38
qApp->setStyleSheet(m_settings->value("mainWindow/styleSheet").toString());
42
m_settings = new Settings(this);
44
m_settings->refresh();
46
if(m_settings->mainWindow()->hasIconTheme())
48
QIcon::setThemeName(m_settings->mainWindow()->iconTheme());
51
if(m_settings->mainWindow()->hasStyleSheet())
53
qApp->setStyleSheet(m_settings->mainWindow()->styleSheet());
44
57
setAcceptDrops(true);
83
98
if(m_tabWidget->currentIndex() != -1)
100
savePerFileSettings(currentTab());
85
102
if(currentTab()->open(filePath))
104
restorePerFileSettings(currentTab());
87
106
QFileInfo fileInfo(filePath);
89
m_settings->setValue("mainWindow/openPath", fileInfo.absolutePath());
108
m_settings->mainWindow()->setOpenPath(fileInfo.absolutePath());
90
109
m_recentlyUsedMenu->addOpenAction(filePath);
92
111
m_tabWidget->setTabText(m_tabWidget->currentIndex(), fileInfo.completeBaseName());
114
133
bool MainWindow::openInNewTab(const QString& filePath, int page, const QRectF& highlight)
116
DocumentView* newTab = new DocumentView();
135
DocumentView* newTab = new DocumentView(this);
118
137
if(newTab->open(filePath))
120
newTab->setContinousMode(m_settings->value("documentView/continuousMode", false).toBool());
121
newTab->setLayoutMode(static_cast< DocumentView::LayoutMode >(m_settings->value("documentView/layoutMode", 0).toUInt()));
122
newTab->setScaleMode(static_cast< DocumentView::ScaleMode >(m_settings->value("documentView/scaleMode", 0).toUInt()));
123
newTab->setScaleFactor(m_settings->value("documentView/scaleFactor", 1.0).toReal());
124
newTab->setRotation(static_cast< Poppler::Page::Rotation >(m_settings->value("documentView/rotation", 0).toUInt()));
125
newTab->setHighlightAll(m_settings->value("documentView/highlightAll", false).toBool());
139
newTab->setContinousMode(m_settings->documentView()->continuousMode());
140
newTab->setLayoutMode(m_settings->documentView()->layoutMode());
141
newTab->setScaleMode(m_settings->documentView()->scaleMode());
142
newTab->setScaleFactor(m_settings->documentView()->scaleFactor());
143
newTab->setRotation(m_settings->documentView()->rotation());
144
newTab->setHighlightAll(m_settings->documentView()->highlightAll());
146
restorePerFileSettings(newTab);
127
148
QFileInfo fileInfo(filePath);
129
m_settings->setValue("mainWindow/openPath", fileInfo.absolutePath());
150
m_settings->mainWindow()->setOpenPath(fileInfo.absolutePath());
130
151
m_recentlyUsedMenu->addOpenAction(filePath);
132
153
int index = m_tabWidget->insertTab(m_tabWidget->currentIndex() + 1, newTab, fileInfo.completeBaseName());
631
656
if(m_tabWidget->currentIndex() != -1)
633
QString path = m_settings->value("mainWindow/openPath", QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).toString();
634
QString filePath = QFileDialog::getOpenFileName(this, tr("Open"), path, "Portable document format (*.pdf)");
658
QString path = m_settings->mainWindow()->openPath();
659
QString filePath = QFileDialog::getOpenFileName(this, tr("Open"), path, Settings::MainWindow::fileFilter());
636
661
if(!filePath.isEmpty())
647
672
void MainWindow::on_openInNewTab_triggered()
649
QString path = m_settings->value("mainWindow/openPath", QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).toString();
650
QStringList filePaths = QFileDialog::getOpenFileNames(this, tr("Open in new tab"), path, "Portable document format (*.pdf)");
674
QString path = m_settings->mainWindow()->openPath();
675
QStringList filePaths = QFileDialog::getOpenFileNames(this, tr("Open in new tab"), path, Settings::MainWindow::fileFilter());
652
677
if(!filePaths.isEmpty())
675
700
void MainWindow::on_saveCopy_triggered()
677
QString path = m_settings->value("mainWindow/savePath", QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).toString();
678
QString filePath = QFileDialog::getSaveFileName(this, tr("Save copy"), QFileInfo(QDir(path), QFileInfo(currentTab()->filePath()).fileName()).filePath(), "Portable document format (*.pdf)");
702
QString path = m_settings->mainWindow()->savePath();
703
QString filePath = QFileDialog::getSaveFileName(this, tr("Save copy"), QFileInfo(QDir(path), QFileInfo(currentTab()->filePath()).fileName()).filePath(), Settings::MainWindow::fileFilter());
680
705
if(!filePath.isEmpty())
682
if(currentTab()->saveCopy(filePath))
707
if(currentTab()->save(filePath, false))
684
m_settings->setValue("mainWindow/savePath", QFileInfo(filePath).absolutePath());
709
m_settings->mainWindow()->setSavePath(QFileInfo(filePath).absolutePath());
718
void MainWindow::on_saveAs_triggered()
720
QString path = m_settings->mainWindow()->savePath();
721
QString filePath = QFileDialog::getSaveFileName(this, tr("Save as"), QFileInfo(QDir(path), QFileInfo(currentTab()->filePath()).fileName()).filePath(), Settings::MainWindow::fileFilter());
723
if(!filePath.isEmpty())
725
if(currentTab()->save(filePath, true))
727
open(filePath, currentTab()->currentPage());
729
m_settings->mainWindow()->setSavePath(QFileInfo(filePath).absolutePath());
733
QMessageBox::warning(this, tr("Warning"), tr("Could not save as '%1'.").arg(filePath));
693
738
void MainWindow::on_print_triggered()
695
740
QPrinter* printer = new QPrinter();
932
997
tableView->setAlternatingRowColors(true);
933
998
tableView->setSortingEnabled(true);
934
999
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
1000
tableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
1002
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
1004
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
1005
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
936
1009
tableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
937
tableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
938
1010
tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
1012
#endif // QT_VERSION
939
1014
tableView->verticalHeader()->setVisible(false);
941
1016
tableView->setModel(fontsModel);
1248
void MainWindow::closeEvent(QCloseEvent *event)
1329
void MainWindow::closeEvent(QCloseEvent* event)
1251
1332
saveBookmarks();
1334
for(int index = 0; index < m_tabWidget->count(); ++index)
1336
savePerFileSettings(tab(index));
1253
1339
removeToolBar(m_searchToolBar);
1255
if(m_settings->value("mainWindow/trackRecentlyUsed", false).toBool())
1257
m_settings->setValue("mainWindow/recentlyUsed", m_recentlyUsedMenu->filePaths());
1261
m_settings->remove("mainWindow/recentlyUsed");
1341
m_settings->mainWindow()->setRecentlyUsed(m_settings->mainWindow()->trackRecentlyUsed() ? m_recentlyUsedMenu->filePaths() : QStringList());
1264
m_settings->setValue("mainWindow/geometry", m_fullscreenAction->isChecked() ? m_fullscreenAction->data() : saveGeometry());
1265
m_settings->setValue("mainWindow/state", saveState());
1343
m_settings->mainWindow()->setGeometry(m_fullscreenAction->isChecked() ? m_fullscreenAction->data().toByteArray() : saveGeometry());
1344
m_settings->mainWindow()->setState(saveState());
1267
1346
QMainWindow::closeEvent(event);
1304
void MainWindow::restoreSettings()
1306
PageItem::setCacheSize(m_settings->value("pageItem/cacheSize", 32 * 1024 * 1024).toInt());
1308
PageItem::setDecoratePages(m_settings->value("pageItem/decoratePages", true).toBool());
1309
PageItem::setDecorateLinks(m_settings->value("pageItem/decorateLinks", true).toBool());
1310
PageItem::setDecorateFormFields(m_settings->value("pageItem/decorateFormFields", true).toBool());
1312
PageItem::setInvertColors(m_settings->value("pageItem/invertColors", false).toBool());
1314
PageItem::setCopyModifiers(static_cast< Qt::KeyboardModifier >(m_settings->value("pageItem/copyModifiers", 0x02000000).toInt()));
1315
PageItem::setAnnotateModifiers(static_cast< Qt::KeyboardModifier >(m_settings->value("pageItem/annotateModifiers", 0x04000000).toInt()));
1317
DocumentView::setOpenUrl(m_settings->value("documentView/openUrl", false).toBool());
1319
DocumentView::setAutoRefresh(m_settings->value("documentView/autoRefresh", false).toBool());
1321
DocumentView::setAntialiasing(m_settings->value("documentView/antialiasing", true).toBool());
1322
DocumentView::setTextAntialiasing(m_settings->value("documentView/textAntialiasing", true).toBool());
1323
DocumentView::setTextHinting(m_settings->value("documentView/textHinting", false).toBool());
1325
DocumentView::setOverprintPreview(m_settings->value("documentView/overprintPreview", false).toBool());
1327
DocumentView::setPrefetch(m_settings->value("documentView/prefetch", false).toBool());
1329
DocumentView::setPagesPerRow(m_settings->value("documentView/pagesPerRow", 3).toInt());
1331
DocumentView::setPageSpacing(m_settings->value("documentView/pageSpacing", 5.0).toReal());
1332
DocumentView::setThumbnailSpacing(m_settings->value("documentView/thumbnailSpacing", 3.0).toReal());
1334
DocumentView::setThumbnailSize(m_settings->value("documentView/thumbnailSize", 150.0).toReal());
1336
DocumentView::setZoomModifiers(static_cast< Qt::KeyboardModifier >(m_settings->value("documentView/zoomModifiers", 0x04000000).toInt()));
1337
DocumentView::setRotateModifiers(static_cast< Qt::KeyboardModifier >(m_settings->value("documentView/rotateModifiers", 0x02000000).toInt()));
1338
DocumentView::setHorizontalModifiers(static_cast< Qt::KeyboardModifier >(m_settings->value("documentView/horizontalModifiers", 0x08000000).toInt()));
1340
DocumentView::setHighlightDuration(m_settings->value("documentView/highlightDuration", 5000).toInt());
1342
DocumentView::setSourceEditor(m_settings->value("documentView/sourceEditor").toString());
1345
1383
DocumentView* MainWindow::currentTab() const
1347
1385
return qobject_cast< DocumentView* >(m_tabWidget->currentWidget());
1384
1422
m_tabWidget->setTabsClosable(true);
1385
1423
m_tabWidget->setElideMode(Qt::ElideRight);
1387
m_tabWidget->setTabPosition(static_cast< QTabWidget::TabPosition >(m_settings->value("mainWindow/tabPosition", 0).toUInt()));
1388
m_tabWidget->setTabBarPolicy(static_cast< TabWidget::TabBarPolicy >(m_settings->value("mainWindow/tabVisibility", 0).toUInt()));
1425
m_tabWidget->setTabPosition(m_settings->mainWindow()->tabPosition());
1426
m_tabWidget->setTabBarPolicy(m_settings->mainWindow()->tabVisibility());
1390
1428
setCentralWidget(m_tabWidget);
1437
1475
m_searchTimer->setSingleShot(true);
1439
1477
connect(m_searchProgressLineEdit, SIGNAL(textEdited(QString)), m_searchTimer, SLOT(start()));
1440
connect(m_searchProgressLineEdit, SIGNAL(returnPressed()), SLOT(on_search_timeout()));
1478
connect(m_searchProgressLineEdit, SIGNAL(returnPressed(Qt::KeyboardModifiers)), SLOT(on_search_returnPressed(Qt::KeyboardModifiers)));
1441
1479
connect(m_searchTimer, SIGNAL(timeout()), SLOT(on_search_timeout()));
1443
1481
m_matchCaseCheckBox = new QCheckBox(tr("Match &case"), this);
1480
1518
m_saveCopyAction->setIconVisibleInMenu(true);
1481
1519
connect(m_saveCopyAction, SIGNAL(triggered()), SLOT(on_saveCopy_triggered()));
1523
m_saveAsAction = new QAction(tr("Save &as..."), this);
1524
m_saveAsAction->setShortcut(QKeySequence::SaveAs);
1525
m_saveAsAction->setIcon(QIcon::fromTheme("document-save-as", QIcon(":icons/document-save-as.svg")));
1526
m_saveAsAction->setIconVisibleInMenu(true);
1527
connect(m_saveAsAction, SIGNAL(triggered()), SLOT(on_saveAs_triggered()));
1485
1531
m_printAction = new QAction(tr("&Print..."), this);
1783
1829
m_fileToolBar = addToolBar(tr("&File"));
1784
1830
m_fileToolBar->setObjectName("fileToolBar");
1786
foreach(QString action, m_settings->value("mainWindow/fileToolBar", QStringList() << "openInNewTab" << "refresh").toStringList())
1832
foreach(QString action, m_settings->mainWindow()->fileToolBar())
1788
1834
if(action == "open") { m_fileToolBar->addAction(m_openAction); }
1789
1835
else if(action == "openInNewTab") { m_fileToolBar->addAction(m_openInNewTabAction); }
1790
1836
else if(action == "refresh") { m_fileToolBar->addAction(m_refreshAction); }
1791
1837
else if(action == "saveCopy") { m_fileToolBar->addAction(m_saveCopyAction); }
1838
else if(action == "saveAs") { m_fileToolBar->addAction(m_saveAsAction); }
1792
1839
else if(action == "print") { m_fileToolBar->addAction(m_printAction); }
1797
1844
m_editToolBar = addToolBar(tr("&Edit"));
1798
1845
m_editToolBar->setObjectName("editToolBar");
1800
foreach(QString action, m_settings->value("mainWindow/editToolBar", QStringList() << "currentPage" << "previousPage" << "nextPage").toStringList())
1847
foreach(QString action, m_settings->mainWindow()->editToolBar())
1802
1849
if(action == "currentPage") { m_currentPageSpinBox->setVisible(true); m_editToolBar->addWidget(m_currentPageSpinBox); }
1803
1850
else if(action == "previousPage") { m_editToolBar->addAction(m_previousPageAction); }
1815
1862
m_viewToolBar = addToolBar(tr("&View"));
1816
1863
m_viewToolBar->setObjectName("viewToolBar");
1818
foreach(QString action, m_settings->value("mainWindow/viewToolBar", QStringList() << "scaleFactor" << "zoomIn" << "zoomOut").toStringList())
1865
foreach(QString action, m_settings->mainWindow()->viewToolBar())
1820
1867
if(action == "continuousMode") { m_viewToolBar->addAction(m_continuousModeAction); }
1821
1868
else if(action == "twoPagesMode") { m_viewToolBar->addAction(m_twoPagesModeAction); }
1869
1916
m_outlineView->setAlternatingRowColors(true);
1870
1917
m_outlineView->setEditTriggers(QAbstractItemView::NoEditTriggers);
1919
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
1921
m_outlineView->header()->setSectionResizeMode(QHeaderView::Stretch);
1925
m_outlineView->header()->setResizeMode(QHeaderView::Stretch);
1927
#endif // QT_VERSION
1872
1929
m_outlineView->header()->setVisible(false);
1873
m_outlineView->header()->setResizeMode(QHeaderView::Stretch);
1875
1931
connect(m_outlineView, SIGNAL(clicked(QModelIndex)), SLOT(on_outline_clicked(QModelIndex)));
1892
1948
m_propertiesView->setAlternatingRowColors(true);
1893
1949
m_propertiesView->setEditTriggers(QAbstractItemView::NoEditTriggers);
1951
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
1953
m_propertiesView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
1954
m_propertiesView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
1958
m_propertiesView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
1959
m_propertiesView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
1961
#endif // QT_VERSION
1895
1963
m_propertiesView->horizontalHeader()->setVisible(false);
1896
m_propertiesView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
1897
1964
m_propertiesView->verticalHeader()->setVisible(false);
1898
m_propertiesView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
1900
1966
m_propertiesDock->setWidget(m_propertiesView);
2039
2106
m_helpMenu->addAction(m_aboutAction);
2109
void MainWindow::createDatabase()
2113
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
2115
QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
2119
QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
2121
#endif // QT_VERSION
2123
QDir().mkpath(path);
2125
m_database = QSqlDatabase::addDatabase("QSQLITE");
2126
m_database.setDatabaseName(QDir(path).filePath("database"));
2129
if(m_database.isOpen())
2131
m_database.transaction();
2133
QStringList tables = m_database.tables();
2134
QSqlQuery query(m_database);
2138
if(!tables.contains("tabs_v2"))
2140
query.exec("CREATE TABLE tabs_v2 "
2142
",instanceName TEXT"
2143
",currentPage INTEGER"
2144
",continuousMode INTEGER"
2145
",layoutMode INTEGER"
2146
",scaleMode INTEGER"
2148
",rotation INTEGER)");
2150
if(!query.isActive())
2152
qDebug() << query.lastError();
2155
restoreTabsFromXml(true);
2160
if(!tables.contains("bookmarks_v1"))
2162
query.exec("CREATE TABLE bookmarks_v1 "
2166
if(!query.isActive())
2168
qDebug() << query.lastError();
2171
restoreBookmarksFromXml(true);
2174
// per-file settings
2176
if(!tables.contains("perfilesettings_v1"))
2178
query.exec("CREATE TABLE perfilesettings_v1 "
2180
",filePath TEXT PRIMARY KEY"
2181
",currentPage INTEGER"
2182
",continuousMode INTEGER"
2183
",layoutMode INTEGER"
2184
",scaleMode INTEGER"
2186
",rotation INTEGER)");
2188
if(!query.isActive())
2190
qDebug() << query.lastError();
2194
if(m_settings->mainWindow()->restorePerFileSettings())
2196
query.exec("DELETE FROM perfilesettings_v1 WHERE filePath IN (SELECT filePath FROM perfilesettings_v1 ORDER BY lastUsed DESC LIMIT -1 OFFSET 1000)");
2200
query.exec("DELETE FROM perfilesettings_v1");
2203
if(!query.isActive())
2205
qDebug() << query.lastError();
2208
m_database.commit();
2212
qDebug() << m_database.lastError();
2042
2218
void MainWindow::restoreTabs()
2044
if(m_settings->value("mainWindow/restoreTabs", false).toBool())
2046
QFile file(QFileInfo(QDir(QFileInfo(m_settings->fileName()).path()), "tabs.xml").filePath());
2222
if(m_database.isOpen())
2224
m_database.transaction();
2226
QSqlQuery query(m_database);
2227
query.prepare("SELECT filePath,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation FROM tabs_v2 WHERE instanceName==?");
2229
query.bindValue(0, objectName());
2235
if(!query.isActive())
2237
qDebug() << query.lastError();
2241
if(openInNewTab(query.value(0).toString()))
2243
currentTab()->setContinousMode(static_cast< bool >(query.value(2).toUInt()));
2244
currentTab()->setLayoutMode(static_cast< DocumentView::LayoutMode >(query.value(3).toUInt()));
2246
currentTab()->setScaleMode(static_cast< DocumentView::ScaleMode >(query.value(4).toUInt()));
2247
currentTab()->setScaleFactor(query.value(5).toReal());
2249
currentTab()->setRotation(static_cast< Poppler::Page::Rotation >(query.value(6).toUInt()));
2251
currentTab()->jumpToPage(query.value(1).toInt());
2255
m_database.commit();
2260
restoreTabsFromXml(false);
2265
void MainWindow::restoreTabsFromXml(bool removeFile)
2267
if(m_settings->mainWindow()->restoreTabs())
2269
QFile file(QDir(QFileInfo(m_settings->fileName()).path()).filePath("tabs.xml"));
2048
2271
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
2087
2315
void MainWindow::saveTabs()
2089
QFile file(QFileInfo(QDir(QFileInfo(m_settings->fileName()).path()), "tabs.xml").filePath());
2091
if(m_settings->value("mainWindow/restoreTabs", false).toBool())
2319
if(m_database.isOpen())
2321
m_database.transaction();
2323
QSqlQuery query(m_database);
2325
if(m_settings->mainWindow()->restoreTabs())
2327
query.prepare("DELETE FROM tabs_v2 WHERE instanceName==?");
2329
query.bindValue(0, objectName());
2333
if(!query.isActive())
2335
qDebug() << query.lastError();
2338
query.prepare("INSERT INTO tabs_v2 "
2339
"(filePath,instanceName,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation)"
2340
" VALUES (?,?,?,?,?,?,?,?)");
2342
for(int index = 0; index < m_tabWidget->count(); ++index)
2344
query.bindValue(0, QFileInfo(tab(index)->filePath()).absoluteFilePath());
2345
query.bindValue(1, objectName());
2346
query.bindValue(2, tab(index)->currentPage());
2348
query.bindValue(3, static_cast< uint >(tab(index)->continousMode()));
2349
query.bindValue(4, static_cast< uint >(tab(index)->layoutMode()));
2351
query.bindValue(5, static_cast< uint >(tab(index)->scaleMode()));
2352
query.bindValue(6, tab(index)->scaleFactor());
2354
query.bindValue(7, static_cast< uint >(tab(index)->rotation()));
2358
if(!query.isActive())
2360
qDebug() << query.lastError();
2367
query.exec("DELETE FROM tabs_v2");
2369
if(!query.isActive())
2371
qDebug() << query.lastError();
2375
m_database.commit();
2380
QFile file(QDir(QFileInfo(m_settings->fileName()).path()).filePath("tabs.xml"));
2382
if(m_settings->mainWindow()->restoreTabs())
2093
2384
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
2131
2424
void MainWindow::restoreBookmarks()
2133
if(m_settings->value("mainWindow/restoreBookmarks", false).toBool())
2135
QFile file(QFileInfo(QDir(QFileInfo(m_settings->fileName()).path()), "bookmarks.xml").filePath());
2428
if(m_database.isOpen())
2430
m_database.transaction();
2432
QSqlQuery query(m_database);
2433
query.exec("SELECT filePath,pages FROM bookmarks_v1");
2437
if(!query.isActive())
2439
qDebug() << query.lastError();
2443
BookmarkMenu* bookmark = new BookmarkMenu(query.value(0).toString(), this);
2445
QStringList pages = query.value(1).toString().split(",", QString::SkipEmptyParts);
2447
foreach(QString page, pages)
2449
bookmark->addJumpToPageAction(page.toInt());
2452
connect(bookmark, SIGNAL(openTriggered(QString)), SLOT(on_bookmark_openTriggered(QString)));
2453
connect(bookmark, SIGNAL(openInNewTabTriggered(QString)), SLOT(on_bookmark_openInNewTabTriggered(QString)));
2454
connect(bookmark, SIGNAL(jumpToPageTriggered(QString,int)), SLOT(on_bookmark_jumpToPageTriggered(QString,int)));
2456
m_bookmarksMenu->addMenu(bookmark);
2459
m_database.commit();
2464
restoreBookmarksFromXml(false);
2469
void MainWindow::restoreBookmarksFromXml(bool removeFile)
2471
if(m_settings->mainWindow()->restoreBookmarks())
2473
QFile file(QDir(QFileInfo(m_settings->fileName()).path()).filePath("bookmarks.xml"));
2137
2475
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
2174
2517
void MainWindow::saveBookmarks()
2176
QFile file(QFileInfo(QDir(QFileInfo(m_settings->fileName()).path()), "bookmarks.xml").filePath());
2178
if(m_settings->value("mainWindow/restoreBookmarks", false).toBool())
2521
if(m_database.isOpen())
2523
m_database.transaction();
2525
QSqlQuery query(m_database);
2526
query.exec("DELETE FROM bookmarks_v1");
2528
if(!query.isActive())
2530
qDebug() << query.lastError();
2533
if(m_settings->mainWindow()->restoreBookmarks())
2535
query.prepare("INSERT INTO bookmarks_v1 "
2539
foreach(QAction* action, m_bookmarksMenu->actions())
2541
BookmarkMenu* bookmark = qobject_cast< BookmarkMenu* >(action->menu());
2547
foreach(int page, bookmark->pages())
2549
pages.append(QString::number(page));
2552
query.bindValue(0, QFileInfo(bookmark->filePath()).absoluteFilePath());
2553
query.bindValue(1, pages.join(","));
2557
if(!query.isActive())
2559
qDebug() << query.lastError();
2566
m_database.commit();
2571
QFile file(QDir(QFileInfo(m_settings->fileName()).path()).filePath("bookmarks.xml"));
2573
if(m_settings->mainWindow()->restoreBookmarks())
2180
2575
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
2617
void MainWindow::restorePerFileSettings(DocumentView* tab)
2621
if(m_settings->mainWindow()->restorePerFileSettings() && m_database.isOpen() && tab != 0)
2623
m_database.transaction();
2625
QSqlQuery query(m_database);
2626
query.prepare("SELECT currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation FROM perfilesettings_v1 WHERE filePath==?");
2628
query.bindValue(0, QCryptographicHash::hash(QFileInfo(tab->filePath()).absoluteFilePath().toUtf8(), QCryptographicHash::Sha1).toBase64());
2634
tab->setContinousMode(query.value(1).toBool());
2635
tab->setLayoutMode(static_cast< DocumentView::LayoutMode >(query.value(2).toUInt()));
2637
tab->setScaleMode(static_cast< DocumentView::ScaleMode >(query.value(3).toUInt()));
2638
tab->setScaleFactor(query.value(4).toReal());
2640
tab->setRotation(static_cast< Poppler::Page::Rotation >(query.value(5).toUInt()));
2642
tab->jumpToPage(query.value(0).toInt(), false);
2645
if(!query.isActive())
2647
qDebug() << query.lastError();
2650
m_database.commit();
2660
void MainWindow::savePerFileSettings(const DocumentView* tab)
2664
if(m_settings->mainWindow()->restorePerFileSettings() && m_database.isOpen() && tab != 0)
2666
m_database.transaction();
2668
QSqlQuery query(m_database);
2669
query.prepare("INSERT OR REPLACE INTO perfilesettings_v1 "
2670
"(lastUsed,filePath,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation)"
2671
" VALUES (?,?,?,?,?,?,?,?)");
2673
query.bindValue(0, QDateTime::currentDateTime().toTime_t());
2675
query.bindValue(1, QCryptographicHash::hash(QFileInfo(tab->filePath()).absoluteFilePath().toUtf8(), QCryptographicHash::Sha1).toBase64());
2676
query.bindValue(2, tab->currentPage());
2678
query.bindValue(3, static_cast< uint >(tab->continousMode()));
2679
query.bindValue(4, static_cast< uint >(tab->layoutMode()));
2681
query.bindValue(5, static_cast< uint >(tab->scaleMode()));
2682
query.bindValue(6, tab->scaleFactor());
2684
query.bindValue(7, static_cast< uint >(tab->rotation()));
2688
if(!query.isActive())
2690
qDebug() << query.lastError();
2693
m_database.commit();
2220
2703
#ifdef WITH_DBUS
2226
bool MainWindowAdaptor::open(const QString& filePath, int page, const QRectF &highlight)
2709
bool MainWindowAdaptor::open(const QString& filePath, int page, const QRectF& highlight)
2228
2711
return mainWindow()->open(filePath, page, highlight);
2231
bool MainWindowAdaptor::openInNewTab(const QString& filePath, int page, const QRectF &highlight)
2714
bool MainWindowAdaptor::openInNewTab(const QString& filePath, int page, const QRectF& highlight)
2233
2716
return mainWindow()->openInNewTab(filePath, page, highlight);