Mercurial > hg > sonic-visualiser
view main/main.cpp @ 5:0a687ed1b50f
* Add Thumbwheel widget for all our zooming needs
* Use QSettings to save/restore window size and position -- precursor to
switching our preferences to QSettings as well -- wish I'd noticed it sooner
* Only suspend writes (not reads from the underlying cache objects) from the
fft caches when repainting the spectrogram -- performance should now be
significantly better
author | Chris Cannam |
---|---|
date | Thu, 03 Aug 2006 15:40:11 +0000 |
parents | 40116f709d3b |
children | d4487202d0e8 |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ /* Sonic Visualiser An audio file viewer and annotation editor. Centre for Digital Music, Queen Mary, University of London. This file copyright 2006 Chris Cannam. 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. See the file COPYING included with this distribution for more information. */ #include "MainWindow.h" #include "system/System.h" #include "system/Init.h" #include "base/TempDirectory.h" #include "base/PropertyContainer.h" #include "base/Preferences.h" #include "base/ConfigFile.h" #include <QMetaType> #include <QApplication> #include <QDesktopWidget> #include <QMessageBox> #include <QTranslator> #include <QLocale> #include <QSettings> #include <iostream> #include <signal.h> //!!! catch trappable signals, cleanup temporary directory etc //!!! check for crap left over from previous run static QMutex cleanupMutex; static void signalHandler(int /* signal */) { // Avoid this happening more than once across threads cleanupMutex.lock(); std::cerr << "signalHandler: cleaning up and exiting" << std::endl; TempDirectory::getInstance()->cleanup(); exit(0); // without releasing mutex } int main(int argc, char **argv) { QApplication application(argc, argv); signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); #ifndef Q_WS_WIN32 signal(SIGHUP, signalHandler); signal(SIGQUIT, signalHandler); #endif svSystemSpecificInitialisation(); QApplication::setOrganizationName("Sonic Visualiser"); QApplication::setOrganizationDomain("sonicvisualiser.org"); QApplication::setApplicationName("Sonic Visualiser"); QString language = QLocale::system().name(); QTranslator qtTranslator; QString qtTrName = QString("qt_%1").arg(language); std::cerr << "Loading " << qtTrName.toStdString() << "..." << std::endl; qtTranslator.load(qtTrName); application.installTranslator(&qtTranslator); QTranslator svTranslator; QString svTrName = QString("sonic-visualiser_%1").arg(language); std::cerr << "Loading " << svTrName.toStdString() << "..." << std::endl; svTranslator.load(svTrName, ":i18n"); application.installTranslator(&svTranslator); // Permit size_t and PropertyName to be used as args in queued signal calls qRegisterMetaType<size_t>("size_t"); qRegisterMetaType<PropertyContainer::PropertyName>("PropertyContainer::PropertyName"); MainWindow gui; QDesktopWidget *desktop = QApplication::desktop(); QRect available = desktop->availableGeometry(); int width = available.width() * 2 / 3; int height = available.height() / 2; if (height < 450) height = available.height() * 2 / 3; if (width > height * 2) width = height * 2; QSettings settings; settings.beginGroup("MainWindow"); QSize size = settings.value("size", QSize(width, height)).toSize(); gui.resize(size); if (settings.contains("position")) { gui.move(settings.value("position").toPoint()); } settings.endGroup(); gui.show(); if (argc > 1) { QString path = argv[1]; bool success = false; if (path.endsWith(".sv")) { success = gui.openSessionFile(path); } if (!success) { success = gui.openSomeFile(path); } if (!success) { QMessageBox::critical(&gui, QMessageBox::tr("Failed to open file"), QMessageBox::tr("File \"%1\" could not be opened").arg(path)); } } int rv = application.exec(); std::cerr << "application.exec() returned " << rv << std::endl; cleanupMutex.lock(); TempDirectory::getInstance()->cleanup(); Preferences::getInstance()->getConfigFile()->commit(); return rv; }