void ImagePaintRecipe::onSelectedIndexChanged(int selectedIndex)
{
  DropDown* dropDown = dynamic_cast<DropDown*>(sender());

  if (dropDown) {
    // Change the tiling image for the paint to the one specified by the imageSource property.
    Option* selectedOption = dropDown->at(selectedIndex);
    ImagePaint paint(QUrl(selectedOption->imageSource()), RepeatPattern::XY);
    mRecipeContainer->setBackground(paint);
  }
}
void App::handleInvokeButtonClick() {
	Button *button = dynamic_cast<Button*>(QObject::sender());

	DropDown* qddAction = root->findChild<DropDown*>("qddAction");
	QString action;
	if(qddAction->selectedIndex() != 5){
		action = qddAction->at(qddAction->selectedIndex())->text();
	} else{
		action = root->findChild<QObject*>("qtaAction")->property("text").toString();
	}

	QString mime = root->findChild<QObject*>("qtaMimeType")->property("text").toString();

	QString uri = root->findChild<QObject*>("qtaURI")->property("text").toString();

	QString data = root->findChild<QObject*>("qtaData")->property("text").toString();

	QString target = button->text();

	invoke(0, action, mime, uri, data, target);
}
LogicPasteApp::LogicPasteApp(Application *app)
    : QObject(app), loginSheet_(NULL), ignoreSettingsEvent_(false) {
    qDebug() << "LogicPasteApp::LogicPasteApp()";
    QCoreApplication::setOrganizationName("LogicProbe");
    QCoreApplication::setApplicationName("LogicPaste");

    qRegisterMetaType<PasteListing>("PasteListing");

    pasteModel_ = new PasteModel(this);

    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
    qml->setContextProperty("cs", this);
    qml->setContextProperty("model", pasteModel_);

    AppSettings *appSettings = AppSettings::instance();

    if(!qml->hasErrors()) {
        tabbedPane_ = qml->createRootObject<TabbedPane>();
        if(tabbedPane_) {
            // Paste page
            pastePage_ = tabbedPane_->findChild<Page*>("pastePage");
            connect(pastePage_, SIGNAL(submitPaste()), this, SLOT(onSubmitPaste()));
            replaceDropDown(pastePage_, "formatDropDown");

            // History page
            historyNav_ = tabbedPane_->findChild<NavigationPane*>("historyPage");
            connect(historyNav_, SIGNAL(popTransitionEnded(bb::cascades::Page*)),
                this, SLOT(onPopFinished(bb::cascades::Page*)));
            historyPage_ = historyNav_->findChild<Page*>("pasteListPage");
            connect(historyPage_, SIGNAL(refreshPage()), pasteModel_, SLOT(refreshHistory()));

            ListView *historyList = historyPage_->findChild<ListView*>("pasteList");
            historyList->setDataModel(pasteModel_->historyModel());
            connect(historyList, SIGNAL(openPaste(QString)), this, SLOT(onOpenHistoryPaste(QString)));
            connect(historyList, SIGNAL(copyUrl(QString)), this, SLOT(onCopyText(QString)));
            connect(historyList, SIGNAL(deletePaste(QString)), this, SLOT(onDeleteHistoryPaste(QString)));

            connect(pasteModel_, SIGNAL(historyUpdating()), historyPage_, SLOT(onRefreshStarted()));
            connect(pasteModel_, SIGNAL(historyUpdated(bool)), this, SLOT(onHistoryRefreshComplete(bool)));

            // Trending page
            trendingNav_ = tabbedPane_->findChild<NavigationPane*>("trendingPage");
            connect(trendingNav_, SIGNAL(popTransitionEnded(bb::cascades::Page*)),
                this, SLOT(onPopFinished(bb::cascades::Page*)));
            trendingPage_ = trendingNav_->findChild<Page*>("pasteListPage");
            trendingPage_->findChild<ActionItem*>("refreshAction")->setEnabled(true);
            connect(trendingPage_, SIGNAL(refreshPage()), pasteModel_, SLOT(refreshTrending()));

            ListView *trendingList = trendingPage_->findChild<ListView*>("pasteList");
            trendingList->setDataModel(pasteModel_->trendingModel());
            connect(trendingList, SIGNAL(openPaste(QString)), this, SLOT(onOpenTrendingPaste(QString)));
            connect(trendingList, SIGNAL(copyUrl(QString)), this, SLOT(onCopyText(QString)));

            connect(pasteModel_, SIGNAL(trendingUpdating()), trendingPage_, SLOT(onRefreshStarted()));
            connect(pasteModel_, SIGNAL(trendingUpdated(bool)), this, SLOT(onTrendingRefreshComplete(bool)));

            // Settings page
            settingsPage_ = tabbedPane_->findChild<Page*>("settingsPage");
            CheckBox *sslCheckBox = settingsPage_->findChild<CheckBox *>("sslCheckBox");
            sslCheckBox->setChecked(appSettings->useSsl());

            CheckBox *formatterEnable = settingsPage_->findChild<CheckBox*>("formatterEnable");
            formatterEnable->setChecked(appSettings->formatterEnabled());

            CheckBox *formatterLineNumbering = settingsPage_->findChild<CheckBox*>("formatterLineNumbering");
            formatterLineNumbering->setChecked(appSettings->formatterLineNumbering());

            DropDown *formatterStyle = settingsPage_->findChild<DropDown*>("formatterStyle");
            for(int i = formatterStyle->count() - 1; i >= 0; --i) {
                if(formatterStyle->at(i)->value() == appSettings->formatterStyle()) {
                    formatterStyle->setSelectedIndex(i);
                    break;
                }
            }

            connect(settingsPage_, SIGNAL(requestLogin()), this, SLOT(onRequestLogin()));
            connect(settingsPage_, SIGNAL(requestLogout()), this, SLOT(onRequestLogout()));
            connect(settingsPage_, SIGNAL(refreshUserDetails()), pasteModel_, SLOT(refreshUserDetails()));
            connect(settingsPage_, SIGNAL(connectionSettingsChanged()), this, SLOT(onConnectionSettingsChanged()));
            connect(settingsPage_, SIGNAL(pasteSettingsChanged()), this, SLOT(onPasteSettingsChanged()));
            connect(settingsPage_, SIGNAL(formatterSettingsChanged()), this, SLOT(onFormatterSettingsChanged()));
            connect(pasteModel_, SIGNAL(userDetailsUpdated()), this, SLOT(onUserDetailsUpdated()));
            connect(pasteModel_, SIGNAL(userDetailsError(QString)), this, SLOT(onUserDetailsError(QString)));
            connect(pasteModel_, SIGNAL(userAvatarUpdated()), this, SLOT(onUserAvatarUpdated()));
            connect(pasteModel_, SIGNAL(deletePasteError(PasteListing,QString)), this, SLOT(onDeletePasteError(PasteListing,QString)));

            FormatDropDown *formatDropDown = replaceDropDown(settingsPage_, "formatDropDown");
            connect(formatDropDown, SIGNAL(selectedIndexChanged(int)), this, SLOT(onPasteSettingsChanged()));

            // Tabbed pane
            connect(tabbedPane_, SIGNAL(activePaneChanged(bb::cascades::AbstractPane*)),
                this, SLOT(onActivePaneChanged(bb::cascades::AbstractPane*)));

            app->setScene(tabbedPane_);

            // Create the pull-down menu
            ActionItem *aboutItem = ActionItem::create()
            .title(tr("About"))
            .image(QUrl("asset:///images/action-about.png"));
            connect(aboutItem, SIGNAL(triggered()), this, SLOT(onAboutActionTriggered()));

            Menu *menu = Menu::create()
            .addAction(aboutItem);
            app->setMenu(menu);

            if(pasteModel_->isAuthenticated()) {
                onUserDetailsUpdated();
                onUserAvatarUpdated();
            }

            refreshPastePageDefaults();
            refreshMainActions();
        }
    }