2 #include "bookmarkdialog.h"
3 #include "ui_bookmarkdialog.h"
12 BookmarkDialog::BookmarkDialog(QWidget *parent) :
14 ui(new Ui::BookmarkDialog),
18 resize(parent->width() * 0.8, height());
20 ui->tableWidget->setColumnCount(2);
23 BookmarkDialog::~BookmarkDialog()
28 void BookmarkDialog::setEditMode(bool edit)
30 ui->buttonAdd->setVisible(edit);
31 ui->buttonDelete->setVisible(edit);
32 ui->buttonDown->setVisible(edit);
33 ui->buttonUp->setVisible(edit);
37 setWindowTitle(tr("ブックマークを開く"));
41 for (int i = 0; ; i++) {
42 QString name = settings.value(IniKey_BookmarkEntryName(i), "").toString();
47 QString path = settings.value(IniKey_BookmarkEntryPath(i)).toString();
48 insertData(i, name, path);
50 ui->tableWidget->resizeColumnsToContents();
51 ui->tableWidget->resizeRowsToContents();
54 int BookmarkDialog::selectedIndex() const
56 return ui->tableWidget->currentRow();
59 void BookmarkDialog::insertData(int row, const QString &name, const QString &path)
61 ui->tableWidget->insertRow(row);
63 QTableWidgetItem *iName = new QTableWidgetItem(name);
65 iName->setFlags(iName->flags() ^ Qt::ItemIsEditable);
67 ui->tableWidget->setItem(row, 0, iName);
69 QTableWidgetItem *iPath = new QTableWidgetItem(path);
70 iPath->setFlags(iPath->flags() ^ Qt::ItemIsEditable);
71 ui->tableWidget->setItem(row, 1, iPath);
74 void BookmarkDialog::moveSelectedRows(bool up)
76 qDebug() << "BookmarkDialog::moveSelectedRows();" << up;
78 QList<QTableWidgetItem*> selected = ui->tableWidget->selectedItems();
79 if (selected.isEmpty()) {
80 qDebug() << "Not selected.";
84 QVector<QString> before;
85 QVector<QString> after;
87 for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
88 QString name = ui->tableWidget->item(i, 0)->data(Qt::DisplayRole).toString();
89 QString path = ui->tableWidget->item(i, 1)->data(Qt::DisplayRole).toString();
90 before << name + "¥t" + path;
92 qDebug() << "set before" << before;
94 after.resize(before.size());
97 foreach (QTableWidgetItem *item, selected) {
98 if (item->column() != 0) {
99 int newRow = (up) ? item->row() - 1 : item->row() + 1;
103 else if (newRow >= ui->tableWidget->rowCount()) {
107 after[newRow] = before[item->row()];
108 before[item->row()] = QString::null;
113 qDebug() << "set after(1)" << after;
115 for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
116 if (!before[i].isEmpty()) {
117 while (!after[n].isEmpty()) {
120 after[n] = before[i];
123 qDebug() << "set after(2)" << after;
125 while (ui->tableWidget->rowCount() > 0) {
126 ui->tableWidget->removeRow(0);
130 foreach (const QString &val, after) {
131 QStringList list = val.split("¥t");
132 insertData(n, list[0], list[1]);
136 ui->tableWidget->resizeColumnsToContents();
137 ui->tableWidget->resizeRowsToContents();
139 foreach (int i, newRows) {
140 for (n = 0; n < 2; n++) {
141 QModelIndex index = ui->tableWidget->model()->index(i, n);
142 ui->tableWidget->selectionModel()->select(index, QItemSelectionModel::Select);
148 void BookmarkDialog::accept()
153 for (i = 0; i < ui->tableWidget->rowCount(); i++) {
154 index = ui->tableWidget->model()->index(i, 0);
155 QString name = ui->tableWidget->model()->data(index).toString();
156 if (name.isEmpty()) {
157 ui->tableWidget->setCurrentCell(i, 0);
158 QMessageBox::critical(this, tr("エラー"), tr("名前が未入力です。"));
162 index = ui->tableWidget->model()->index(i, 1);
163 QString path = ui->tableWidget->model()->data(index).toString();
165 settings.setValue(IniKey_BookmarkEntryName(i), name);
166 settings.setValue(IniKey_BookmarkEntryPath(i), path);
168 while (!settings.value(IniKey_BookmarkEntryName(i), "").toString().isEmpty()) {
169 settings.remove(IniKey_BookmarkEntryName(i));
170 settings.remove(IniKey_BookmarkEntryPath(i));
177 void BookmarkDialog::on_buttonDelete_clicked()
179 foreach (const QTableWidgetItem *item, ui->tableWidget->selectedItems()) {
180 if (item->column() == 0) {
181 ui->tableWidget->removeRow(item->row());
186 void BookmarkDialog::on_buttonUp_clicked()
188 moveSelectedRows(true);
191 void BookmarkDialog::on_buttonDown_clicked()
193 moveSelectedRows(false);
196 void BookmarkDialog::on_buttonAdd_clicked()
198 static QString initPath = QDir::homePath();
200 QString path = QFileDialog::getExistingDirectory(
201 this, tr("フォルダを選択"), initPath);
202 if (!path.isEmpty()) {
203 QFileInfo info(path);
204 QString name(info.fileName());
205 if (name.isEmpty()) {
208 insertData(ui->tableWidget->rowCount(), name, path);
211 ui->tableWidget->resizeColumnsToContents();
212 ui->tableWidget->resizeRowsToContents();