[ create a new paste ] login | about

Link: http://codepad.org/y1eEfFNu    [ raw code | fork ]

C++, pasted on Feb 12:
//////////////////// QmlInit.h //////////////////////////////

class QmlInit : public QObject
{
    Q_OBJECT
public:
    QmlInit();
private:
    QSharedPointer<QDeclarativeView> view;
    QSharedPointer<QmlApplicationViewer> viewer;
    QSharedPointer<QDeclarativeContext> rootCtxt;

    QSharedPointer<TitleListModel> titleListModel;
    MapWindow *mapWindow;
    DumpSettings *dumpSettings;
    QSharedPointer<Evopedia> evopedia;
    QString lang;
    QString searchPrefix;
    QStringList languageList;
    QSharedPointer<QStringListModelForQML> languageListModel;

protected:
    void closeEvent(QCloseEvent *event);

private slots:
    void on_languageChooser_currentIndexChanged(QString text);
    void on_searchField_textChanged(QString text);
    void refreshSearchResults();
};

////////////////////////// QmlInit.cpp /////////////////////////

QmlInit::QmlInit()
{

    titleListModel=QSharedPointer<TitleListModel>(new TitleListModel());
    languageList.reserve(1);
    searchPrefix=QString("");

// define the view and context for QML interaction
    view = QSharedPointer<QDeclarativeView>(new QDeclarativeView());
    QDeclarativeContext *rootCtxt = view->rootContext();

    // set up the evopedia specifics
    titleListModel->setTitleIterator(TitleIterator());
    evopedia = (static_cast<EvopediaApplication *>(qApp))->evopedia();
    foreach (LocalArchive *b, evopedia->getArchiveManager()->getDefaultLocalArchives())
    {
        qDebug() << b->getLanguage();
        lang = b->getLanguage(); //DEBUG
        languageList << b->getLanguage();
        on_languageChooser_currentIndexChanged(lang);
        refreshSearchResults();
    }

    languageListModel = QSharedPointer<QStringListModelForQML>(new QStringListModelForQML());

    // set the model up in the list view to use the titleListModel
    rootCtxt->setContextProperty("titlesModel", titleListModel.data());
    rootCtxt->setContextProperty("languageSelectionModel", languageListModel.data());

    view->setSource(QUrl("qrc:/Main.qml"));
    view->show();

    QObject *rootObject= view->rootObject();

    QObject::connect(rootObject, SIGNAL(signalLanguageChanged(QString)),
                     this, SLOT(on_languageChooser_currentIndexChanged(QString)));
    QObject::connect(rootObject, SIGNAL(signalSearchTextChanged(QString)),
                     this, SLOT(on_searchField_textChanged(QString)));

    languageListModel->setStringList(languageList);
}

void QmlInit::on_languageChooser_currentIndexChanged(QString text)
{
    QObject* rootObject = view->rootObject();
    if(rootObject!=NULL)
        rootObject->setProperty("languageButtonText",QVariant(text));

    lang = text;
    refreshSearchResults();
}

void QmlInit::on_searchField_textChanged(QString text)
{
    searchPrefix=text;
}


void QmlInit::refreshSearchResults()
{
    QSharedPointer<Evopedia> evopedia = (static_cast<EvopediaApplication *>(qApp))->evopedia();
    LocalArchive *backend = evopedia->getArchiveManager()->getLocalArchive(lang);
    TitleIterator it;
    if (backend != 0)
        it = backend->getTitlesWithPrefix(searchPrefix);

    titleListModel->setTitleIterator(it);
}

///////////////////////////// Main.qml /////////////////////////
PageStackWindow {
    id: rootWindow

    initialPage: searchPage

    SearchPage {
        id: searchPage
    }

    ToolBarLayout {
        id: commonTools
        visible: true
        ToolIcon {
            platformIconId: "toolbar-back";
            onClicked: {myMenu.close(); pageStack.pop() }
        }
        ToolIcon {
            platformIconId: "toolbar-view-menu"
            anchors.right: (parent === undefined) ? undefined : parent.right
            onClicked: (myMenu.status == DialogStatus.Closed) ? myMenu.open() : myMenu.close()
        }
    }
    Menu {
        id: myMenu
        visualParent: pageStack
        MenuLayout {
            MenuItem { text: qsTr("Settings") }
        }
    }
}

///////////////////////////////// SearchPage.qml //////////////////

Page {
    id: searchPage
    tools: commonTools

    signal signalLanguageChanged(string lang);
    signal signalSearchTextChanged(string text);

    ListView {
        id: titlesView
        anchors {
            top: parent.top
            bottom: searchField.top
            left: parent.left
            right: parent.right
        }

        model: titlesModel
        delegate: Text { text: name }
    }

    TextField {
        id: searchField
        placeholderText: "Searchterm..."
        anchors.bottom: parent.bottom
        onTextChanged: {
            searchPage.signalSearchTextChanged(searchField.text)
        }
    }

    Button {
        id: languageButton
        text: "x"
        anchors.left: searchField.right
        anchors.bottom: parent.bottom
        onClicked: langDialog.open()
    }

    ScrollDecorator {
        flickableItem: titlesView
    }

    SelectionDialog {
        id: langDialog
        titleText: qsTr("Language")
        selectedIndex: 0
        model: ListModel { }
        onAccepted: {
            languageButton.text = langDialog.model.get(langDialog.selectedIndex).name
            searchPage.signalLanguageChanged(langDialog.model.get(langDialog.selectedIndex).name)
        }

        onRejected: {
            selectedIndex = 0
            searchPage.signalLanguageChanged(langDialog.model.get(langDialog.selectedIndex).name)
        }
    }

    Connections {
           target: languageSelectionModel
           onStringAdded: {
               langDialog.model.append({name: newString})
           }
       }
}


Create a new paste based on this one


Comments: