1 /***************************************************************************
3 clipboard part of kvoctrain
5 -----------------------------------------------------------------------
7 begin : Thu Mar 11 20:50:53 MET 1999
9 copyright : (C) 1999-2001 Ewald Arnold
10 (C) 2001 The KDE-EDU team
12 email : kvoctrain@ewald-arnold.de
14 -----------------------------------------------------------------------
16 ***************************************************************************/
18 /***************************************************************************
20 * This program is free software; you can redistribute it and/or modify *
21 * it under the terms of the GNU General Public License as published by *
22 * the Free Software Foundation; either version 2 of the License, or *
23 * (at your option) any later version. *
25 ***************************************************************************/
27 #include "kvoctrain.h"
29 #include <qclipboard.h>
31 #include <klineedit.h>
38 void kvoctrainApp::slotSmartSearchClip()
41 QString entries
= QApplication::clipboard()->text();
43 if (!entries
.isEmpty()) {
44 int pos
= entries
.find ('\n'); // search for a line end
46 pos
= entries
.find ('\r');
48 if (pos
< 0) // just first "line"
51 s
= entries
.left(pos
);
53 searchpos
= 0; // search from beginning
54 searchstr
= s
.stripWhiteSpace(); // in case RETURN is pressed
55 searchLine
->setFocus();
56 searchLine
->setText (searchstr
);
59 searchLine
->setFocus();
63 vector
<int> kvoctrainApp::getCsvOrder(kvoctrainDoc
*doc
, QStringList
*lang_order
)
65 vector
<int> csv_order
;
67 if (!Prefs::useCurrent()) {
68 if (lang_order
&& lang_order
->count() != 0) {
69 for (int i
= 0; i
< (int) lang_order
->count(); i
++) {
70 int j
= doc
->findIdent((*lang_order
)[i
]);
72 csv_order
.push_back (j
);
74 csv_order
.push_back (-1);
79 for (int i = 0; i < csv_order.size(); i++)
80 cout << csv_order[i] << " ";
84 /* perhaps skip missing ??
85 for (int i = csv_order.size()-1; i >= 0; i--)
86 if (csv_order[i] == -1)
87 csv_order.erase(csv_order.begin() + i);
89 // append indices from doc if no order given
90 for (int i
= 0; i
< doc
->numLangs(); i
++)
91 if (::find (csv_order
.begin(), csv_order
.end(), i
) == csv_order
.end())
92 csv_order
.push_back(i
);
94 if (csv_order.size() > doc->numLangs() )
95 csv_order.erase(csv_order.begin() + doc->numLangs(), csv_order.end());
98 // remove trailing garbage
99 for (int i
= csv_order
.size()-1; i
>= 0; i
--) {
100 if (csv_order
[i
] != -1)
103 csv_order
.erase(csv_order
.begin() + i
);
110 void kvoctrainApp::slotEditCopy()
112 slotStatusMsg(i18n("Copying selection to clipboard..."));
114 QApplication::setOverrideCursor( waitCursor
);
118 vector
<int> csv_order
= getCsvOrder(doc
, &Prefs::pasteOrder() /*&paste_order*/);
120 KVocTrainTable
*table
= view
->getTable();
122 for (int j
= table
->numRows()-1; j
>= 0; j
--) {
123 if (table
->isRowSelected(j
))
125 kvoctrainExpr
*expr
= table
->getRow(j
);
126 if (expr
== 0 ) return;
129 for (int i
= 0; i
< (int) csv_order
.size(); i
++) {
133 exp
+= Prefs::separator();
135 if (csv_order
[i
] >= 0) {
136 if (csv_order
[i
] == 0)
137 exp
+= expr
->getOriginal();
139 exp
+= expr
->getTranslation(csv_order
[i
]);
146 if (!exp
.isEmpty()) {
147 #if defined(_WS_X11_)
148 // disconnect(QApplication::clipboard(),SIGNAL(dataChanged()),this,0);
150 QApplication::clipboard()->setText(exp
);
151 #if defined(_WS_X11_)
152 // connect(QApplication::clipboard(),SIGNAL(dataChanged()), this,SLOT(clipboardChanged()));
156 QApplication::restoreOverrideCursor();
157 slotStatusMsg(IDS_DEFAULT
);
161 void kvoctrainApp::slotEditPaste()
163 slotStatusMsg(i18n("Inserting clipboard contents..."));
165 QApplication::setOverrideCursor( waitCursor
);
167 QString entries
= QApplication::clipboard()->text();
169 vector
<int> csv_order
= getCsvOrder(doc
, &Prefs::pasteOrder() /*&paste_order*/);
171 bool changed
= false;
173 // view->setView(0, langset, gradecols);
174 while (!entries
.isEmpty()) {
175 int pos
= entries
.find ('\n'); // search for a line end
177 pos
= entries
.find ('\r'); // mac style ?
185 s
= entries
.left(pos
);
186 entries
.remove (0, pos
+1);
189 // similar block in kvd_csv.cpp::loadFromCsv()
191 if (!s
.stripWhiteSpace().isEmpty()) {
192 if (Prefs::pasteOrder().count() != 0) {
193 kvoctrainExpr
bucket (s
, Prefs::separator(), act_lesson
);
195 expr
.setLesson(act_lesson
);
196 // now move columns according to paste-order
198 for (int i
= 0; i
< (int) csv_order
.size(); i
++) {
199 if (csv_order
[i
] >= 0) {
201 s
= bucket
.getOriginal();
203 s
= bucket
.getTranslation(i
);
205 if (csv_order
[i
] == 0)
208 expr
.setTranslation(csv_order
[i
], s
);
212 doc
->appendEntry (&expr
);
215 kvoctrainExpr
expr (s
, Prefs::separator(), act_lesson
);
217 doc
->appendEntry (&expr
);
224 view
->getTable()->updateContents(view
->getTable()->numRows()-1, KV_COL_ORG
);
227 QApplication::restoreOverrideCursor();
228 slotStatusMsg(IDS_DEFAULT
);