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
|
// File : controller.cpp
// Creation date : Thu Apr 30 2002 17:13:12 GMT by Juanjo �lvarez
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 2002 Juanjo �lvarez ([email protected])
// Copyright (C) 2002 Szymon Stefanek ([email protected])
//
// 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 opinion) any later version.
//
// This program is distributed in the HOPE that it will be USEFUL,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, write to the Free Software Foundation,
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "controller.h"
#include "kvi_window.h"
#include "kvi_console.h"
#include "kvi_mirccntrl.h"
#include "kvi_app.h"
#include "kvi_options.h"
#include <qtimer.h>
#include <qstringlist.h>
#include <qclipboard.h>
extern KviPointerList<SPasteController> * g_pControllerList;
SPasteController::SPasteController(KviWindow * w,int id)
: m_pClipBuff(NULL),m_pFile(NULL),m_pId(id),m_pWindow(w)
{
g_pControllerList->append(this);
//m_pWindow = w;
m_pTimer = new QTimer(this);
}
SPasteController::~SPasteController()
{
g_pControllerList->removeRef(this);
if(m_pFile)
{
m_pFile->close();
delete m_pFile;
}
if(m_pTimer)
{
m_pTimer->stop();
delete m_pTimer;
}
if(m_pClipBuff)
delete m_pClipBuff;
}
bool SPasteController::pasteFileInit(QString &fileName)
{
if(m_pClipBuff)return false; // can't paste a file while pasting the clipboard
if(m_pFile)return false; // can't paste two files at a time
m_pFile = new QFile(fileName);
if(!m_pFile->open(IO_ReadOnly))return false;
connect(m_pTimer,SIGNAL(timeout()),this,SLOT(pasteFile()));
m_pTimer->start(KVI_OPTION_UINT(KviOption_uintPasteDelay));
return true;
}
bool SPasteController::pasteClipboardInit(void)
{
if(m_pFile)return false; // can't paste clipboard while pasting a file
QString tmp(g_pApp->clipboard()->text());
if(m_pClipBuff)
{
(*m_pClipBuff) += QStringList::split("\n",tmp,true);
} else {
m_pClipBuff = new QStringList(QStringList::split("\n",tmp,true));
m_clipBuffIterator = m_pClipBuff->begin();
}
connect(m_pTimer,SIGNAL(timeout()),this,SLOT(pasteClipboard()));
m_pTimer->start(KVI_OPTION_UINT(KviOption_uintPasteDelay));
return true;
}
void SPasteController::pasteFile(void)
{
#ifndef COMPILE_USE_QT4
QString line;
if(m_pFile->readLine(line,999) != -1)
{
if(line.isEmpty())
line = QChar(KVI_TEXT_RESET);
if( (!g_pApp->windowExists(m_pWindow)) || m_pWindow->console()->isNotConnected() )
{
m_pFile->close();
delete this;
} else m_pWindow->ownMessage(line.ascii());
} else { //File finished
m_pFile->close();
delete this;
}
#endif
}
void SPasteController::pasteClipboard(void)
{
if(m_clipBuffIterator != m_pClipBuff->end())
{
if((!g_pApp->windowExists(m_pWindow)) || m_pWindow->console()->isNotConnected() )
delete this;
else {
if((*m_clipBuffIterator).isEmpty())(*m_clipBuffIterator) = QChar(KVI_TEXT_RESET);
m_pWindow->ownMessage((*m_clipBuffIterator).ascii()); // <-- not good :/
++m_clipBuffIterator;
}
} else delete this;//Clipboard finished
}
#include "controller.moc"
|