Commit 97ce64ff authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Qt4: back-end for dialog_Question

parent 3c62d02f
......@@ -50,12 +50,19 @@ DialogHandler::DialogHandler (intf_thread_t *intf)
var_Create (intf, "dialog-login", VLC_VAR_ADDRESS);
var_AddCallback (intf, "dialog-login", LoginCallback, this);
connect (this, SIGNAL(question(struct dialog_question_t *)),
this, SLOT(requestAnswer(struct dialog_question_t *)),
Qt::BlockingQueuedConnection);
var_Create (intf, "dialog-question", VLC_VAR_ADDRESS);
var_AddCallback (intf, "dialog-question", QuestionCallback, this);
dialog_Register (intf);
}
DialogHandler::~DialogHandler (void)
{
dialog_Unregister (intf);
var_DelCallback (intf, "dialog-question", QuestionCallback, this);
var_DelCallback (intf, "dialog-login", LoginCallback, this);
var_DelCallback (intf, "dialog-fatal", MessageCallback, this);
}
......@@ -138,3 +145,40 @@ void DialogHandler::requestLogin (struct dialog_login_t *data)
delete dialog;
}
int DialogHandler::QuestionCallback (vlc_object_t *obj, const char *var,
vlc_value_t, vlc_value_t value, void *data)
{
DialogHandler *self = (DialogHandler *)data;
dialog_question_t *dialog = (dialog_question_t *)value.p_address;
emit self->question (dialog);
return VLC_SUCCESS;
}
void DialogHandler::requestAnswer (struct dialog_question_t *data)
{
QMessageBox *box = new QMessageBox (QMessageBox::Question,
qfu(data->title), qfu(data->message));
QAbstractButton *yes = (data->yes != NULL)
? box->addButton ("&" + qfu(data->yes), QMessageBox::YesRole) : NULL;
QAbstractButton *no = (data->no != NULL)
? box->addButton ("&" + qfu(data->no), QMessageBox::NoRole) : NULL;
QAbstractButton *cancel = (data->cancel != NULL)
? box->addButton ("&" + qfu(data->cancel), QMessageBox::RejectRole)
: NULL;
box->exec ();
int answer;
if (box->clickedButton () == yes)
answer = 1;
else
if (box->clickedButton () == no)
answer = 2;
else
answer = 3;
delete box;
data->answer = answer;
}
......@@ -38,15 +38,19 @@ private:
static int MessageCallback (vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void *);
static int LoginCallback (vlc_object_t *obj, const char *,
vlc_value_t, vlc_value_t, void *data);
vlc_value_t, vlc_value_t, void *);
static int QuestionCallback (vlc_object_t *obj, const char *,
vlc_value_t, vlc_value_t, void *);
private slots:
void displayMessage (const struct dialog_fatal_t *);
void requestLogin (struct dialog_login_t *data);
void requestLogin (struct dialog_login_t *);
void requestAnswer (struct dialog_question_t *);
signals:
void message (const struct dialog_fatal_t *);
void authentication (struct dialog_login_t *);
void question (struct dialog_question_t *);
};
#endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment