Skip to content

Commit

Permalink
ide: sclang path chooser widget has recent-files history.
Browse files Browse the repository at this point in the history
  • Loading branch information
scztt committed Mar 18, 2015
1 parent f700a04 commit 2300cb3
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 21 deletions.
14 changes: 14 additions & 0 deletions editors/sc-ide/widgets/settings/sclang_page.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,26 @@ void SclangPage::load( Manager *s )
readLanguageConfig();
}

#define RECENTRUNTIMESCOUNT 20

void SclangPage::store( Manager *s )
{
s->beginGroup("IDE/interpreter");

s->setValue("autoStart", ui->autoStart->isChecked());
s->setValue("runtimeDir", ui->runtimeDir->text());
s->setValue("configFile", ui->activeConfigFileComboBox->currentText());

QStringList recents = ui->runtimeDir->recentPaths();
recents.push_front(ui->runtimeDir->text());
recents.removeDuplicates();
if (recents.size() > RECENTRUNTIMESCOUNT) { recents = recents.mid(0, RECENTRUNTIMESCOUNT); }

QVariantList recentsList;
foreach (const QString & path, recents)
recentsList << QVariant(path);
s->setValue("runtimeDirRecent", QVariant::fromValue<QVariantList>(recentsList));

s->endGroup();

writeLanguageConfig();
Expand Down
59 changes: 38 additions & 21 deletions editors/sc-ide/widgets/util/path_chooser_widget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#ifndef SCIDE_WIDGETS_PATH_CHOOSER_WIDGET_HPP_INCLUDED
#define SCIDE_WIDGETS_PATH_CHOOSER_WIDGET_HPP_INCLUDED

#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QFileDialog>
#include <QHBoxLayout>
Expand All @@ -34,32 +34,45 @@ class PathChooserWidget : public QWidget
Q_OBJECT

public:
PathChooserWidget
(QWidget *parent = 0, QFileDialog::FileMode mode = QFileDialog::ExistingFile ):
PathChooserWidget(QWidget *parent = 0, QFileDialog::FileMode mode = QFileDialog::ExistingFile ):
QWidget(parent),
mMode(mode),
dialog(0)
{
mTextField = new QLineEdit;
mTextField = new QComboBox;
mTextField->setEditable(true);
mTextField->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred));

mButton = new QPushButton;
mButton->setIcon( QIcon::fromTheme("folder") );
mButton->setFixedWidth( 30 );
mButton->setFlat(true);
//setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
mBrowseButton = new QPushButton;
mBrowseButton->setIconSize(QSize(24, 24));
mBrowseButton->setMaximumSize(QSize(24, 24));
mBrowseButton->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
mBrowseButton->setFlat(true);

QHBoxLayout *box = new QHBoxLayout(this);
QHBoxLayout *box = new QHBoxLayout();
box->addWidget(mTextField);
box->addWidget(mButton);
box->addWidget(mBrowseButton);
box->setContentsMargins(0,0,0,0);
box->setSpacing(1);
box->setSpacing(5);

setLayout(box);

connect(mButton, SIGNAL(clicked()), this, SLOT(execDialog()), Qt::QueuedConnection);
connect(mBrowseButton, SIGNAL(clicked()), this, SLOT(execDialog()), Qt::QueuedConnection);
}

QString text() const { return mTextField->text(); }
QString text() const { return mTextField->currentText(); }

void setText( const QString & text ) { mTextField->setText(text); }
void setText( const QString & text ) { mTextField->setCurrentText(text); }

void setRecentPaths(const QStringList& recents) { mTextField->addItems(recents); }

QStringList recentPaths() {
QStringList recentPaths;
for (int i = 0; i < mTextField->count(); ++i) {
recentPaths.push_back(mTextField->itemText(i));
}
return recentPaths;
}

void setFileMode( QFileDialog::FileMode mode ) { mMode = mode; }

Expand All @@ -71,24 +84,28 @@ public Q_SLOTS:
dialog = new QFileDialog(parent ? parent : this);
}
dialog->setFileMode(mMode);
dialog->selectFile(mTextField->text());
dialog->selectFile(mTextField->currentText());

QPointer<QLineEdit> textField = mTextField;
QPointer<QComboBox> textField = mTextField;
int result = dialog->exec();
if (result == QDialog::Accepted && textField) {
QStringList paths = dialog->selectedFiles();
textField->setText(paths.count() ? paths[0] : "");
if (paths.count()) {
QString path = paths[0];
textField->setCurrentText(path);
textField->insertItem(0, path);
}
}
}

Q_SIGNALS:
void textChanged( const QString & );

private:
QLineEdit *mTextField;
QPushButton *mButton;
QFileDialog::FileMode mMode;
QFileDialog *dialog;
QComboBox *mTextField;
QPushButton *mBrowseButton;
QFileDialog *dialog;
};

} // namespace ScIDE
Expand Down

0 comments on commit 2300cb3

Please sign in to comment.