string GenlistItemScenarioSchedule::getLabelItem(Evas_Object *obj, string part)
{
    string text;

    if (!scenario) return text;

    if (part == "text")
    {
        text = scenario->ioScenario->params["name"];
    }
    else if (part == "time")
    {
        text = "N/A";

        if (scenario->isScheduled())
        {
            auto getTimeForDate = [=,&text](vector<TimeRange> &range)
            {
                if (scheduleRangeNum >= 0 && scheduleRangeNum < range.size())
                {
                    TimeRange tr = range[scheduleRangeNum];
                    text = tr.getStartTimeSec(scDate.tm_year + 1900, scDate.tm_mon + 1, scDate.tm_mday);
                }
            };

            switch (scheduleRange)
            {
            case TimeRange::MONDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_monday); break;
            case TimeRange::TUESDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_tuesday); break;
            case TimeRange::WEDNESDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_wednesday); break;
            case TimeRange::THURSDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_thursday); break;
            case TimeRange::FRIDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_friday); break;
            case TimeRange::SATURDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_saturday); break;
            case TimeRange::SUNDAY: getTimeForDate(scenario->ioSchedule->range_infos.range_sunday); break;
            default: break;
            }
        }
    }
    else if (part == "actions.text")
    {
        text = "Aucune actions.";
        if (scenario->scenario_data.steps.size() > 1)
            text = Utils::to_string(scenario->scenario_data.steps.size()) + " étapes.";
        else if (scenario->scenario_data.steps.size() == 1 &&
                 scenario->scenario_data.steps[0].actions.size() > 0)
            text = Utils::to_string(scenario->scenario_data.steps[0].actions.size()) + " actions.";
    }

    if (scenario->scenario_data.params["schedule"] != "false")
        itemEmitSignal("schedule,true", "calaos");
    else
        itemEmitSignal("schedule,false", "calaos");

    return text;
}
void DialogEditTimeRange::addTreeItem(TimeRange &range)
{
    QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeRanges);

    bool same = range.isSameStartEnd();
    string starttxt, subtxt;
    if (same)
        starttxt = tr("Execute at ").toUtf8().constData();
    else
        starttxt = tr("Start at ").toUtf8().constData();

    auto offsetString = [=](bool isstart)
    {
        if (isstart)
        {
            int h, m, s;
            from_string(range.shour, h);
            from_string(range.smin, m);
            from_string(range.ssec, s);
            int v = h * 3600 + m * 60 + s;

            if (range.start_offset == 1)
                return string(" +") + Utils::time2string_digit(v);
            else if (range.start_offset == -1)
                return string(" -") + Utils::time2string_digit(v);

        }
        else
        {
            int h, m, s;
            from_string(range.ehour, h);
            from_string(range.emin, m);
            from_string(range.esec, s);
            int v = h * 3600 + m * 60 + s;

            if (range.end_offset == 1)
                return string(" +") + Utils::time2string_digit(v);
            else
                if (range.end_offset == -1)
                    return string(" -") + Utils::time2string_digit(v);
        }

        return string();
    };

    if (range.start_type == TimeRange::HTYPE_NORMAL)
        starttxt = starttxt + Utils::time2string_digit(range.getStartTimeSec());
    else if (range.start_type == TimeRange::HTYPE_SUNRISE)
        starttxt = starttxt + tr("Sunrise").toUtf8().constData() + offsetString(true) + " (" + Utils::time2string_digit(range.getStartTimeSec()) + ")";
    else if (range.start_type == TimeRange::HTYPE_SUNSET)
        starttxt = starttxt + tr("Sunset").toUtf8().constData() + offsetString(true) + " (" + Utils::time2string_digit(range.getStartTimeSec()) + ")";
    else if (range.start_type == TimeRange::HTYPE_NOON)
        starttxt = starttxt + tr("Noon").toUtf8().constData() + offsetString(true) + " (" + Utils::time2string_digit(range.getStartTimeSec()) + ")";

    item->setData(0, TwoLineItemDelegate::headerTextRole, QString::fromUtf8(starttxt.c_str()));

    if (!same)
    {
        subtxt = tr("Stop at ").toUtf8().constData();

        if (range.end_type == TimeRange::HTYPE_NORMAL)
            subtxt += Utils::time2string_digit(range.getEndTimeSec());
        else if (range.end_type == TimeRange::HTYPE_SUNRISE)
            subtxt += tr("Sunrise").toUtf8().constData() + offsetString(false) + " (" + Utils::time2string_digit(range.getEndTimeSec()) + ")";
        else if (range.end_type == TimeRange::HTYPE_SUNSET)
            subtxt += tr("Sunset").toUtf8().constData() + offsetString(false) + " (" + Utils::time2string_digit(range.getEndTimeSec()) + ")";
        else if (range.end_type == TimeRange::HTYPE_NOON)
            subtxt += tr("Noon").toUtf8().constData() + offsetString(false) + " (" + Utils::time2string_digit(range.getEndTimeSec()) + ")";

        item->setData(0, TwoLineItemDelegate::subHeaderTextRole, QString::fromUtf8(subtxt.c_str()));
    }

    if (range.isNewRange)
    {
        item->setData(0, TwoLineItemDelegate::headerTextRole, tr("New empty range..."));
        item->setData(0, TwoLineItemDelegate::subHeaderTextRole, tr("Click to edit"));
    }

    QVariant uservalue = QVariant::fromValue<TimeRange>(range);
    item->setData(0, TimeRangeRole, uservalue);

    item->setIcon(0, QIcon(":/img/icon_clock.png"));
}