summaryrefslogtreecommitdiff
path: root/src/libaudqt/playlist-management.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libaudqt/playlist-management.cc')
-rw-r--r--src/libaudqt/playlist-management.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/libaudqt/playlist-management.cc b/src/libaudqt/playlist-management.cc
new file mode 100644
index 0000000..04417f7
--- /dev/null
+++ b/src/libaudqt/playlist-management.cc
@@ -0,0 +1,90 @@
+/*
+ * playlist-management.cc
+ * Copyright 2014 William Pitcock
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include "libaudqt.h"
+
+#include <QCheckBox>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QVBoxLayout>
+
+#include <libaudcore/audstrings.h>
+#include <libaudcore/i18n.h>
+#include <libaudcore/runtime.h>
+#include <libaudcore/playlist.h>
+
+namespace audqt {
+
+static QDialog * buildDeleteDialog (int playlist)
+{
+ auto dialog = new QDialog;
+
+ auto prompt = new QLabel ((const char *) str_printf
+ (_("Do you want to permanently remove “%s”?"),
+ (const char *) aud_playlist_get_title (playlist)), dialog);
+
+ auto skip_prompt = new QCheckBox (translate_str (N_("_Don’t ask again")), dialog);
+
+ auto remove = new QPushButton (translate_str (N_("_Remove")), dialog);
+ auto cancel = new QPushButton (translate_str (N_("_Cancel")), dialog);
+
+ auto buttonbox = new QDialogButtonBox (dialog);
+ buttonbox->addButton (remove, QDialogButtonBox::AcceptRole);
+ buttonbox->addButton (cancel, QDialogButtonBox::RejectRole);
+
+ int id = aud_playlist_get_unique_id (playlist);
+ QObject::connect (buttonbox, &QDialogButtonBox::accepted, [dialog, id] () {
+ int list = aud_playlist_by_unique_id (id);
+ if (list >= 0)
+ aud_playlist_delete (list);
+ dialog->close ();
+ });
+
+ QObject::connect (buttonbox, &QDialogButtonBox::rejected, dialog, &QDialog::close);
+
+ QObject::connect (skip_prompt, &QCheckBox::stateChanged, [] (int state) {
+ aud_set_bool ("audgui", "no_confirm_playlist_delete", (state == Qt::Checked));
+ });
+
+ auto layout = new QVBoxLayout (dialog);
+ layout->addWidget (prompt);
+ layout->addWidget (skip_prompt);
+ layout->addWidget (buttonbox);
+
+ dialog->setWindowTitle (_("Remove Playlist"));
+
+ return dialog;
+}
+
+EXPORT void playlist_confirm_delete (int playlist)
+{
+ if (aud_get_bool ("audgui", "no_confirm_playlist_delete"))
+ {
+ aud_playlist_delete (playlist);
+ return;
+ }
+
+ auto dialog = buildDeleteDialog (playlist);
+ dialog->setAttribute (Qt::WA_DeleteOnClose);
+ dialog->show ();
+}
+
+} // namespace audqt