34 #include "ui_managedatabases.h"
43 #include <QSortFilterProxyModel>
44 #include <QStringBuilder>
45 #include <kfiledialog.h>
48 #include <threadweaver/ThreadWeaver.h>
49 #include <kstandarddirs.h>
56 setAttribute(Qt::WA_DeleteOnClose,
false);
57 setCaption(i18nc(
"@title:window",
"Translation Memories"));
58 setCentralWidget(
new QWidget(
this));
59 Ui_TMManager ui_tmManager;
60 ui_tmManager.setupUi(centralWidget());
64 m_tmListWidget=ui_tmManager.list;
66 connect(ui_tmManager.addData, SIGNAL(clicked(
bool)),
this,SLOT(addDir()));
67 connect(ui_tmManager.create, SIGNAL(clicked(
bool)),
this,SLOT(addDB()));
68 connect(ui_tmManager.importTMX,SIGNAL(clicked(
bool)),
this,SLOT(importTMX()));
69 connect(ui_tmManager.exportTMX,SIGNAL(clicked(
bool)),
this,SLOT(exportTMX()));
70 connect(ui_tmManager.remove, SIGNAL(clicked(
bool)),
this,SLOT(removeDB()));
72 QTimer::singleShot(100,
this,SLOT(initLater()));
76 void TMManagerWin::initLater()
78 connect(m_tmListWidget,SIGNAL(activated(QModelIndex)),
this,SLOT(slotItemActivated(QModelIndex)));
82 m_tmListWidget->setCurrentIndex(*projectDBIndex);
85 void TMManagerWin::addDir()
87 QModelIndex index=m_tmListWidget->currentIndex();
91 QString dir=KFileDialog::getExistingDirectory(KUrl(
"kfiledialog:///tm-food"),
this,
92 i18nc(
"@title:window",
"Select Directory to be scanned"));
95 QList<QUrl> dirs; dirs.append(QUrl(dir));
96 scanRecursive(dirs,index.sibling(index.row(), 0).data().toString());
103 , m_connectionOptionsValid(false)
105 setAttribute(Qt::WA_DeleteOnClose,
true);
106 setCaption( dbName.isEmpty()?i18nc(
"@title:window",
"New Translation Memory"):i18nc(
"@title:window",
"Translation Memory Properties"));
107 setButtons( KDialog::Ok | KDialog::Cancel);
108 enableButtonOk(
false);
110 setupUi(mainWidget());
112 connect(name, SIGNAL(textChanged(QString)),
this, SLOT(feedbackRegardingAcceptable()));
117 if (dbName.isEmpty())
125 connectionBox->hide();
126 connect(dbType, SIGNAL(activated(
int)),
this, SLOT(setConnectionBoxVisible(
int)));
127 m_checkDelayer.setInterval(2000);
128 m_checkDelayer.setSingleShot(
true);
129 connect(&m_checkDelayer, SIGNAL(timeout()),
this, SLOT(checkConnectionOptions()));
130 connect(this->dbName, SIGNAL(textChanged(QString)), &m_checkDelayer, SLOT(start()));
131 connect(dbHost->lineEdit(), SIGNAL(textChanged(QString)), &m_checkDelayer, SLOT(start()));
132 connect(dbUser, SIGNAL(textChanged(QString)), &m_checkDelayer, SLOT(start()));
133 connect(dbPasswd, SIGNAL(textChanged(QString)), &m_checkDelayer, SLOT(start()));
135 QStringList drivers=QSqlDatabase::drivers();
136 if (drivers.contains(
"QPSQL"))
137 dbType->addItem(
"PostgreSQL");
140 void DBPropertiesDialog::setConnectionBoxVisible(
int type)
142 connectionBox->setVisible(type);
143 contentBox->setVisible(!type || m_connectionOptionsValid);
146 void DBPropertiesDialog::feedbackRegardingAcceptable()
148 enableButtonOk(contentBox->isVisible() && !name->text().isEmpty());
151 void DBPropertiesDialog::checkConnectionOptions()
153 m_connectionOptionsValid=
false;
154 if (!connectionBox->isVisible() || name->text().isEmpty() || dbHost->currentText().isEmpty() || dbName->text().isEmpty() || dbUser->text().isEmpty())
158 connParams.
driver=
"QPSQL";
159 connParams.
host=dbHost->currentText();
160 connParams.
db=dbName->text();
161 connParams.
user=dbUser->text();
162 connParams.
passwd=dbPasswd->text();
165 connect(openDBJob,SIGNAL(done(ThreadWeaver::Job*)),openDBJob,SLOT(deleteLater()));
166 connect(openDBJob,SIGNAL(done(ThreadWeaver::Job*)),
this,SLOT(openJobDone(ThreadWeaver::Job*)));
167 ThreadWeaver::Weaver::instance()->enqueue(openDBJob);
170 void DBPropertiesDialog::openJobDone(ThreadWeaver::Job* job)
172 if (!connectionBox->isVisible())
193 void DBPropertiesDialog::accept()
195 if (name->text().isEmpty() || !contentBox->isVisible())
198 if (connectionBox->isVisible())
201 if (!rdb.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
204 QTextStream rdbParams(&rdb);
205 rdbParams<<
"QPSQL"<<
"\n";
206 rdbParams<<dbHost->currentText()<<
"\n";
207 rdbParams<<dbName->text()<<
"\n";
208 rdbParams<<dbUser->text()<<
"\n";
209 rdbParams<<dbPasswd->text()<<
"\n";
213 connect(openDBJob,SIGNAL(done(ThreadWeaver::Job*)),
DBFilesModel::instance(),SLOT(updateProjectTmIndex()));
225 void TMManagerWin::addDB()
231 void TMManagerWin::removeDB()
233 QModelIndex index=m_tmListWidget->currentIndex();
239 void TMManagerWin::importTMX()
241 QString path=KFileDialog::getOpenFileName(KUrl(
"kfiledialog:///tmx"),
242 i18n(
"*.tmx *.xml|TMX files\n*|All files"),
244 i18nc(
"@title:window",
"Select TMX file to be imported into selected database"));
246 QModelIndex index=m_tmListWidget->currentIndex();
247 if (!index.isValid())
249 QString dbName=index.sibling(index.row(), 0).data().toString();
254 connect(j,SIGNAL(failed(ThreadWeaver::Job*)),j,SLOT(deleteLater()));
255 connect(j,SIGNAL(done(ThreadWeaver::Job*)),j,SLOT(deleteLater()));
257 ThreadWeaver::Weaver::instance()->enqueue(j);
263 void TMManagerWin::exportTMX()
266 QString path=KFileDialog::getSaveFileName(KUrl(
"kfiledialog:///tmx"),
267 i18n(
"*.tmx *.xml|TMX files\n*|All files"),
269 i18nc(
"@title:window",
"Select TMX file to export selected database to"));
271 QModelIndex index=m_tmListWidget->currentIndex();
272 if (!index.isValid())
274 QString dbName=index.sibling(index.row(), 0).data().toString();
279 connect(j,SIGNAL(done(ThreadWeaver::Job*)),j,SLOT(deleteLater()));
280 ThreadWeaver::Weaver::instance()->enqueue(j);
284 void TMManagerWin::slotItemActivated(
const QModelIndex&)
294 #include "tmmanager.moc"
static LanguageListModel * instance()
int scanRecursive(const QList< QUrl > &urls, const QString &dbName)
wrapper. returns gross number of jobs started
static Project * instance()
bool m_connectionSuccessful
QString langCodeForSortModelRow(int)
DBPropertiesDialog(QWidget *parent, const QString &name=QString())
QPersistentModelIndex * projectDBIndex() const
ConnectionParams m_connParams
TMManagerWin(QWidget *parent=0)
void openDB(const QString &name)
#define REMOTETM_DATABASE_EXTENSION
void removeTM(QModelIndex)
static DBFilesModel * instance()