moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / kvoctrain / kvoctrain / kva_clip.cpp
bloba5f36c7d92bec3b3761aacf79962f7d7371e8d7d
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 /***************************************************************************
19 * *
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. *
24 * *
25 ***************************************************************************/
27 #include "kvoctrain.h"
29 #include <qclipboard.h>
31 #include <klineedit.h>
32 #include <klocale.h>
34 #include "prefs.h"
35 #include <algorithm>
36 using namespace std;
38 void kvoctrainApp::slotSmartSearchClip()
40 QString s;
41 QString entries = QApplication::clipboard()->text();
43 if (!entries.isEmpty()) {
44 int pos = entries.find ('\n'); // search for a line end
45 if (pos < 0)
46 pos = entries.find ('\r');
48 if (pos < 0) // just first "line"
49 s = entries;
50 else
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);
58 else
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]);
71 if (j >= 0)
72 csv_order.push_back (j);
73 else
74 csv_order.push_back (-1);
79 for (int i = 0; i < csv_order.size(); i++)
80 cout << csv_order[i] << " ";
81 cout << endl;
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)
101 break;
102 else
103 csv_order.erase(csv_order.begin() + i);
106 return csv_order;
110 void kvoctrainApp::slotEditCopy()
112 slotStatusMsg(i18n("Copying selection to clipboard..."));
114 QApplication::setOverrideCursor( waitCursor );
115 QString exp;
116 QString s;
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;
128 bool sep = false;
129 for (int i = 0; i < (int) csv_order.size(); i++) {
130 if (!sep)
131 sep = true;
132 else
133 exp += Prefs::separator();
135 if (csv_order[i] >= 0) {
136 if (csv_order[i] == 0)
137 exp += expr->getOriginal();
138 else
139 exp += expr->getTranslation(csv_order[i]);
143 if (!exp.isEmpty())
144 exp += '\n';
146 if (!exp.isEmpty()) {
147 #if defined(_WS_X11_)
148 // disconnect(QApplication::clipboard(),SIGNAL(dataChanged()),this,0);
149 #endif
150 QApplication::clipboard()->setText(exp);
151 #if defined(_WS_X11_)
152 // connect(QApplication::clipboard(),SIGNAL(dataChanged()), this,SLOT(clipboardChanged()));
153 #endif
156 QApplication::restoreOverrideCursor();
157 slotStatusMsg(IDS_DEFAULT);
161 void kvoctrainApp::slotEditPaste()
163 slotStatusMsg(i18n("Inserting clipboard contents..."));
165 QApplication::setOverrideCursor( waitCursor );
166 QString s;
167 QString entries = QApplication::clipboard()->text();
169 vector <int> csv_order = getCsvOrder(doc, &Prefs::pasteOrder() /*&paste_order*/);
171 bool changed = false;
172 QString num;
173 // view->setView(0, langset, gradecols);
174 while (!entries.isEmpty()) {
175 int pos = entries.find ('\n'); // search for a line end
176 if (pos < 0) {
177 pos = entries.find ('\r'); // mac style ?
180 if (pos < 0) {
181 s = entries;
182 entries = "";
184 else {
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);
194 kvoctrainExpr expr;
195 expr.setLesson(act_lesson);
196 // now move columns according to paste-order
197 QString s;
198 for (int i = 0; i < (int) csv_order.size(); i++) {
199 if (csv_order[i] >= 0) {
200 if (i == 0)
201 s = bucket.getOriginal();
202 else
203 s = bucket.getTranslation(i);
205 if (csv_order[i] == 0)
206 expr.setOriginal(s);
207 else
208 expr.setTranslation(csv_order[i], s);
211 changed = true;
212 doc->appendEntry (&expr);
214 else {
215 kvoctrainExpr expr (s, Prefs::separator(), act_lesson);
216 changed = true;
217 doc->appendEntry (&expr);
222 if (changed) {
223 doc->setModified();
224 view->getTable()->updateContents(view->getTable()->numRows()-1, KV_COL_ORG);
227 QApplication::restoreOverrideCursor();
228 slotStatusMsg(IDS_DEFAULT);