1 #include "preferences.h"
2 #include "bookmarkdialog.h"
3 #include "ui_bookmarkdialog.h"
10 BookmarkDialog::BookmarkDialog(QWidget *parent) :
12 ui(new Ui::BookmarkDialog),
16 resize(parent->width() * 0.8, height());
18 ui->tableWidget->setColumnCount(2);
21 BookmarkDialog::~BookmarkDialog()
26 void BookmarkDialog::setEditMode(bool edit)
28 ui->buttonAdd->setVisible(edit);
29 ui->buttonDelete->setVisible(edit);
30 ui->buttonDown->setVisible(edit);
31 ui->buttonUp->setVisible(edit);
35 setWindowTitle(tr("ブックマークを開く"));
36 connect(ui->tableWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
39 Preferences prefs(this);
40 for (int i = 1; ; i++) {
41 QString name = prefs.getBookmarkEntry(i);
46 QString path = prefs.getBookmarkPath(i);
47 insertData(i - 1, name, path);
49 ui->tableWidget->resizeColumnsToContents();
50 ui->tableWidget->resizeRowsToContents();
51 ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
52 ui->tableWidget->setCurrentCell(0, 0);
55 int BookmarkDialog::selectedIndex() const
57 return ui->tableWidget->currentRow();
60 void BookmarkDialog::insertData(int row, const QString &name, const QString &path)
62 ui->tableWidget->insertRow(row);
64 QTableWidgetItem *iName = new QTableWidgetItem(name);
66 iName->setFlags(iName->flags() ^ Qt::ItemIsEditable);
68 ui->tableWidget->setItem(row, 0, iName);
70 QTableWidgetItem *iPath = new QTableWidgetItem(path);
71 iPath->setFlags(iPath->flags() ^ Qt::ItemIsEditable);
72 ui->tableWidget->setItem(row, 1, iPath);
75 void BookmarkDialog::moveSelectedRows(bool up)
77 qDebug() << "BookmarkDialog::moveSelectedRows();" << up;
79 QList<QTableWidgetItem*> selected = ui->tableWidget->selectedItems();
80 if (selected.isEmpty()) {
81 qDebug() << "Not selected.";
85 QVector<QString> before;
86 QVector<QString> after;
88 for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
89 QString name = ui->tableWidget->item(i, 0)->data(Qt::DisplayRole).toString();
90 QString path = ui->tableWidget->item(i, 1)->data(Qt::DisplayRole).toString();
91 before << name + "¥t" + path;
93 qDebug() << "set before" << before;
95 after.resize(before.size());
98 foreach (QTableWidgetItem *item, selected) {
99 if (item->column() != 0) {
100 int newRow = (up) ? item->row() - 1 : item->row() + 1;
104 else if (newRow >= ui->tableWidget->rowCount()) {
108 after[newRow] = before[item->row()];
109 before[item->row()] = QString::null;
114 qDebug() << "set after(1)" << after;
116 for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
117 if (!before[i].isEmpty()) {
118 while (!after[n].isEmpty()) {
121 after[n] = before[i];
124 qDebug() << "set after(2)" << after;
126 while (ui->tableWidget->rowCount() > 0) {
127 ui->tableWidget->removeRow(0);
131 foreach (const QString &val, after) {
132 QStringList list = val.split("¥t");
133 insertData(n, list[0], list[1]);
137 ui->tableWidget->resizeColumnsToContents();
138 ui->tableWidget->resizeRowsToContents();
140 foreach (int i, newRows) {
141 for (n = 0; n < 2; n++) {
142 QModelIndex index = ui->tableWidget->model()->index(i, n);
143 ui->tableWidget->selectionModel()->select(index, QItemSelectionModel::Select);
149 void BookmarkDialog::accept()
151 Preferences prefs(this);
152 prefs.clearBookmark();
156 for (i = 0; i < ui->tableWidget->rowCount(); i++) {
157 index = ui->tableWidget->model()->index(i, 0);
158 QString name = ui->tableWidget->model()->data(index).toString();
159 if (name.isEmpty()) {
160 ui->tableWidget->setCurrentCell(i, 0);
161 QMessageBox::critical(this, tr("エラー"), tr("名前が未入力です。"));
165 index = ui->tableWidget->model()->index(i, 1);
166 QString path = ui->tableWidget->model()->data(index).toString();
168 prefs.addBookmark(name, path);
174 void BookmarkDialog::on_buttonDelete_clicked()
176 foreach (const QTableWidgetItem *item, ui->tableWidget->selectedItems()) {
177 if (item->column() == 0) {
178 ui->tableWidget->removeRow(item->row());
183 void BookmarkDialog::on_buttonUp_clicked()
185 moveSelectedRows(true);
188 void BookmarkDialog::on_buttonDown_clicked()
190 moveSelectedRows(false);
193 void BookmarkDialog::on_buttonAdd_clicked()
195 static QString initPath = QDir::homePath();
197 QString path = QFileDialog::getExistingDirectory(
198 this, tr("フォルダを選択"), initPath);
199 if (!path.isEmpty()) {
200 QFileInfo info(path);
201 QString name(info.fileName());
202 if (name.isEmpty()) {
205 insertData(ui->tableWidget->rowCount(), name, path);
208 ui->tableWidget->resizeColumnsToContents();
209 ui->tableWidget->resizeRowsToContents();