forked from alphaonex86/Ultracopier
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEventDispatcher.cpp
150 lines (138 loc) · 6.86 KB
/
EventDispatcher.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/** \file EventDispatcher.cpp
\brief Define the class of the event dispatcher
\author alpha_one_x86
\version 0.3
\date 2010
\licence GPL3, see the file COPYING */
#include <QFSFileEngine>
#include <QCoreApplication>
#include <QMessageBox>
#include "EventDispatcher.h"
#include "ExtraSocket.h"
#include "CompilerInfo.h"
/// \todo group the facility engine
/// \brief Initiate the ultracopier event dispatcher and check if no other session is running
EventDispatcher::EventDispatcher()
{
connect(&localListener,SIGNAL(cli(QStringList,bool)),&cliParser,SLOT(cli(QStringList,bool)),Qt::QueuedConnection);
copyMoveEventIdIndex=0;
backgroundIcon=NULL;
sessionloader=new SessionLoader(this);
copyEngineList=new CopyEngineManager(&optionDialog);
core=new Core(copyEngineList);
qRegisterMetaType<CatchState>("CatchState");
qRegisterMetaType<ListeningState>("ListeningState");
qRegisterMetaType<QList<QUrl> >("QList<QUrl> ");
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
if(localListener.tryConnect())
{
stopIt=true;
return;
}
stopIt=false;
localListener.listenServer();
//show the ultracopier information
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("ULTRACOPIER_VERSION: ")+ULTRACOPIER_VERSION);
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("Qt version: %1 (%2)").arg(qVersion()).arg(QT_VERSION));
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("ULTRACOPIER_PLATFORM_NAME: ")+ULTRACOPIER_PLATFORM_NAME);
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("Application path: %1 (%2)").arg(QCoreApplication::applicationFilePath()).arg(QCoreApplication::applicationPid()));
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
//To lunch some initialization after QApplication::exec() to quit eventually
lunchInitFunction.setInterval(0);
lunchInitFunction.setSingleShot(true);
connect(&lunchInitFunction,SIGNAL(timeout()),this,SLOT(initFunction()),Qt::QueuedConnection);
lunchInitFunction.start();
//add the options to use
QList<QPair<QString, QVariant> > KeysList;
//add the options hidden, will not show in options pannel
KeysList.clear();
KeysList.append(qMakePair(QString("Last_version_used"),QVariant("na")));
KeysList.append(qMakePair(QString("ActionOnManualOpen"),QVariant(1)));
KeysList.append(qMakePair(QString("GroupWindowWhen"),QVariant(0)));
options->addOptionGroup("Ultracopier",KeysList);
if(options->getOptionValue("Ultracopier","Last_version_used")!=QVariant("na") && options->getOptionValue("Ultracopier","Last_version_used")!=QVariant(ULTRACOPIER_VERSION))
{
//then ultracopier have been updated
}
options->setOptionValue("Ultracopier","Last_version_used",QVariant(ULTRACOPIER_VERSION));
int a=options->getOptionValue("Ultracopier","ActionOnManualOpen").toInt();
if(a<0 || a>2)
options->setOptionValue("Ultracopier","ActionOnManualOpen",QVariant(1));
a=options->getOptionValue("Ultracopier","GroupWindowWhen").toInt();
if(a<0 || a>5)
options->setOptionValue("Ultracopier","GroupWindowWhen",QVariant(0));
KeysList.clear();
KeysList.append(qMakePair(QString("List"),QVariant(QStringList() << "Ultracopier-0.3")));
options->addOptionGroup("CopyEngine",KeysList);
connect(themes, SIGNAL(newThemeOptions(QWidget*,bool,bool)), &optionDialog, SLOT(newThemeOptions(QWidget*,bool,bool)));
}
/// \brief Destroy the ultracopier event dispatcher
EventDispatcher::~EventDispatcher()
{
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
if(core!=NULL)
delete core;
if(copyEngineList!=NULL)
delete copyEngineList;
if(sessionloader!=NULL)
delete sessionloader;
if(backgroundIcon!=NULL)
delete backgroundIcon;
}
/// \brief return if need be close
bool EventDispatcher::shouldBeClosed()
{
return stopIt;
}
/// \brief Quit ultracopier
void EventDispatcher::quit()
{
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Will quit ultracopier");
//disconnect(QCoreApplication::instance(),SIGNAL(aboutToQuit()),this,SLOT(quit()));
QCoreApplication::exit();
}
/// \brief Called when event loop is setup
void EventDispatcher::initFunction()
{
if(core==NULL || copyEngineList==NULL)
{
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to initialize correctly the software");
return;
}
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Initialize the variable of event loop");
//load the systray icon
if(backgroundIcon==NULL)
{
backgroundIcon=new SystrayIcon();
//connect the slot
//quit is for this object
// connect(core, SIGNAL(newCanDoOnlyCopy(bool)), backgroundIcon, SLOT(newCanDoOnlyCopy(bool)));
connect(backgroundIcon, SIGNAL(quit()),this,SLOT(quit()));
//show option is for OptionEngine object
connect(backgroundIcon, SIGNAL(showOptions()), &optionDialog, SLOT(show()));
connect(©Server, SIGNAL(listenerReady(ListeningState,bool,bool)), backgroundIcon, SLOT(listenerReady(ListeningState,bool,bool)));
connect(©Server, SIGNAL(pluginLoaderReady(CatchState,bool,bool)), backgroundIcon, SLOT(pluginLoaderReady(CatchState,bool,bool)));
connect(backgroundIcon, SIGNAL(tryCatchCopy()), ©Server, SLOT(listen()));
connect(backgroundIcon, SIGNAL(tryUncatchCopy()), ©Server, SLOT(close()));
if(options->getOptionValue("CopyListener","CatchCopyAsDefault").toBool())
copyServer.listen();
ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"copyServer.oneListenerIsLoaded(): "+QString::number(copyServer.oneListenerIsLoaded()));
//backgroundIcon->readyToListen(copyServer.oneListenerIsLoaded());
connect(backgroundIcon, SIGNAL(addWindowCopyMove(CopyMode,QString)), core, SLOT(addWindowCopyMove(CopyMode,QString)));
connect(backgroundIcon, SIGNAL(addWindowTransfer(QString)), core, SLOT(addWindowTransfer(QString)));
connect(©Server, SIGNAL(newCopy(quint32,QStringList,QStringList)), core, SLOT(newCopy(quint32,QStringList,QStringList)));
connect(©Server, SIGNAL(newCopy(quint32,QStringList,QStringList,QString,QString)), core, SLOT(newCopy(quint32,QStringList,QStringList,QString,QString)));
connect(©Server, SIGNAL(newMove(quint32,QStringList,QStringList)), core, SLOT(newMove(quint32,QStringList,QStringList)));
connect(©Server, SIGNAL(newMove(quint32,QStringList,QStringList,QString,QString)), core, SLOT(newMove(quint32,QStringList,QStringList,QString,QString)));
connect(core, SIGNAL(copyFinished(quint32,bool)), ©Server, SLOT(copyFinished(quint32,bool)));
connect(core, SIGNAL(copyCanceled(quint32)), ©Server, SLOT(copyCanceled(quint32)));
connect(copyEngineList, SIGNAL(addCopyEngine(QString,bool)), backgroundIcon, SLOT(addCopyEngine(QString,bool)));
connect(copyEngineList, SIGNAL(removeCopyEngine(QString)), backgroundIcon, SLOT(removeCopyEngine(QString)));
copyEngineList->setIsConnected();
copyServer.resendState();
}
//conntect the last chance signal before quit
connect(QCoreApplication::instance(),SIGNAL(aboutToQuit()),this,SLOT(quit()));
//connect the slot for the help dialog
connect(backgroundIcon,SIGNAL(showHelp()),&theHelp,SLOT(show()));
}