Skip to content

Commit

Permalink
Subclass QApplication and move most code from main() there
Browse files Browse the repository at this point in the history
Create a new subclass of the QApplication class and move most of the
code in the main function to the constructor of the new class. This
makes the code a bit more consistent in terms of object orientedness,
makes it a little simpler and allows extending the new Application class
in the future.
  • Loading branch information
MKleusberg committed May 15, 2014
1 parent e568298 commit 08e8597
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 90 deletions.
93 changes: 93 additions & 0 deletions src/Application.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#include <QFileOpenEvent>
#include <QTranslator>
#include <QTextCodec>
#include <QLibraryInfo>
#include <QLocale>
#include <QDebug>

#include "Application.h"
#include "MainWindow.h"

Application::Application(int& argc, char** argv) :
QApplication(argc, argv)
{
// Set organisation and application names
setOrganizationName("sqlitebrowser");
setApplicationName("SQLite Database Browser");

// Set character encoding to UTF8
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#if QT_VERSION < 0x050000
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
#endif

// Enable translation
QTranslator translator;
translator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&translator);
QTranslator apptranslator;
apptranslator.load("translations/tr_" + QLocale::system().name());
installTranslator(&apptranslator);

// Parse command line
QString fileToOpen;
QStringList sqlToExecute;
m_dontShowMainWindow = false;
for(int i=1;i<arguments().size();i++)
{
// Check next command line argument
if(arguments().at(i) == "-h" || arguments().at(i) == "--help")
{
// Help
qWarning() << qPrintable(tr("Usage: %1 [options] [db]\n").arg(argv[0]));
qWarning() << qPrintable(tr("Possible command line arguments:"));
qWarning() << qPrintable(tr(" -h, --help\t\tShow command line options"));
qWarning() << qPrintable(tr(" -s, --sql [file]\tExecute this SQL file after opening the DB"));
qWarning() << qPrintable(tr(" -q, --quit\t\tExit application after running scripts"));
qWarning() << qPrintable(tr(" [file]\t\tOpen this SQLite database"));
m_dontShowMainWindow = true;
} else if(arguments().at(i) == "-s" || arguments().at(i) == "--sql") {
// Run SQL file: If file exists add it to list of scripts to execute
if(++i >= arguments().size())
qWarning() << qPrintable(tr("The -s/--sql option requires an argument"));
else if(!QFile::exists(arguments().at(i)))
qWarning() << qPrintable(tr("The file %1 does not exist").arg(arguments().at(i)));
else
sqlToExecute.append(arguments().at(i));
} else if(arguments().at(i) == "-q" || arguments().at(i) == "--quit") {
m_dontShowMainWindow = true;
} else {
// Other: Check if it's a valid file name
if(QFile::exists(arguments().at(i)))
fileToOpen = arguments().at(i);
else
qWarning() << qPrintable(tr("Invalid option/non-existant file: %1").arg(arguments().at(i)));
}
}

// Show main window
m_mainWindow = new MainWindow();
m_mainWindow->show();
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(quit()));

// Open database if one was specified
if(fileToOpen.size())
{
if(m_mainWindow->fileOpen(fileToOpen))
{
// If database could be opened run the SQL scripts
foreach(const QString& f, sqlToExecute)
{
QFile file(f);
if(file.open(QIODevice::ReadOnly))
{
m_mainWindow->getDb()->executeMultiSQL(file.readAll(), false, true);
file.close();
}
}
if(!sqlToExecute.isEmpty())
m_mainWindow->browseRefresh();
}
}
}
22 changes: 22 additions & 0 deletions src/Application.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef __APPLICATION_H__
#define __APPLICATION_H__

#include <QApplication>

class MainWindow;

class Application : public QApplication
{
Q_OBJECT

public:
explicit Application(int& argc, char** argv);

bool dontShowMainWindow() { return m_dontShowMainWindow; }

private:
bool m_dontShowMainWindow;
MainWindow* m_mainWindow;
};

#endif
91 changes: 3 additions & 88 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
#include "MainWindow.h"

#include <QApplication>
#include <QTextCodec>
#include <QTranslator>
#include <QLibraryInfo>
#include <QLocale>
#include <QDebug>
#include "Application.h"

#if 0 and defined(Q_WS_MAC)
#include <Carbon/Carbon.h>
Expand Down Expand Up @@ -75,93 +68,15 @@ static pascal OSErr odocHandler(const AppleEvent* inEvent, AppleEvent*

int main( int argc, char ** argv )
{
QApplication a( argc, argv );
a.setOrganizationName("sqlitebrowser");
a.setApplicationName("SQLite Database Browser");

// Set character encoding to UTF8
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#if QT_VERSION < 0x050000
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
#endif

// Enable translation
QTranslator translator;
translator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
a.installTranslator(&translator);
QTranslator apptranslator;
apptranslator.load("translations/tr_" + QLocale::system().name());
a.installTranslator(&apptranslator);

// Parse command line
QString fileToOpen;
QStringList sqlToExecute;
bool quitApplication = false;
for(int i=1;i<a.arguments().size();i++)
{
// Check next command line argument
if(a.arguments().at(i) == "-h" || a.arguments().at(i) == "--help")
{
// Help
qWarning() << qPrintable(QObject::tr("Usage: %1 [options] [db]\n").arg(argv[0]));
qWarning() << qPrintable(QObject::tr("Possible command line arguments:"));
qWarning() << qPrintable(QObject::tr(" -h, --help\t\tShow command line options"));
qWarning() << qPrintable(QObject::tr(" -s, --sql [file]\tExecute this SQL file after opening the DB"));
qWarning() << qPrintable(QObject::tr(" -q, --quit\t\tExit application after running scripts"));
qWarning() << qPrintable(QObject::tr(" [file]\t\tOpen this SQLite database"));
return 0;
} else if(a.arguments().at(i) == "-s" || a.arguments().at(i) == "--sql") {
// Run SQL file: If file exists add it to list of scripts to execute
if(++i >= a.arguments().size())
qWarning() << qPrintable(QObject::tr("The -s/--sql option requires an argument"));
else if(!QFile::exists(a.arguments().at(i)))
qWarning() << qPrintable(QObject::tr("The file %1 does not exist").arg(a.arguments().at(i)));
else
sqlToExecute.append(a.arguments().at(i));
} else if(a.arguments().at(i) == "-q" || a.arguments().at(i) == "--quit") {
quitApplication = true;
} else {
// Other: Check if it's a valid file name
if(QFile::exists(a.arguments().at(i)))
fileToOpen = a.arguments().at(i);
else
qWarning() << qPrintable(QObject::tr("Invalid option/non-existant file: %1").arg(a.arguments().at(i)));
}
}
Application a(argc, argv);

MainWindow w;
#if defined(Q_WS_MAC)
// AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
// NewAEEventHandlerUPP(odocHandler),reinterpret_cast<long>(&w),false);
#endif // Q_WS_MAC

// Show main window
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));

// Open database if one was specified
if(fileToOpen.size())
{
if(w.fileOpen(fileToOpen))
{
// If database could be opened run the SQL scripts
foreach(const QString& f, sqlToExecute)
{
QFile file(f);
if(file.open(QIODevice::ReadOnly))
{
w.getDb()->executeMultiSQL(file.readAll(), false, true);
file.close();
}
}
if(!sqlToExecute.isEmpty())
w.browseRefresh();
}
}

// Quit application now if user doesn't want to see the UI
if(quitApplication)
if(a.dontShowMainWindow())
return 0;

// Run application
Expand Down
6 changes: 4 additions & 2 deletions src/src.pro
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ HEADERS += \
gen_version.h \
SqlExecutionArea.h \
VacuumDialog.h \
DbStructureModel.h
DbStructureModel.h \
Application.h

SOURCES += \
sqlitedb.cpp \
Expand All @@ -62,7 +63,8 @@ SOURCES += \
FilterTableHeader.cpp \
SqlExecutionArea.cpp \
VacuumDialog.cpp \
DbStructureModel.cpp
DbStructureModel.cpp \
Application.cpp

RESOURCES += icons/icons.qrc

Expand Down

0 comments on commit 08e8597

Please sign in to comment.