confclerk-0.6.0/0000775000175000017500000000000012156157674012775 5ustar gregoagregoaconfclerk-0.6.0/confclerk.pro0000664000175000017500000000304412156157674015466 0ustar gregoagregoa# confclerk.pro QMAKEVERSION = $$[QMAKE_VERSION] ISQT4 = $$find(QMAKEVERSION, ^[2-9]) isEmpty( ISQT4 ) { error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4"); } TEMPLATE = subdirs SUBDIRS = src # The global.pri defines the VERSION of the project include(src/global.pri) QMAKE_EXTRA_TARGETS += changelog icon man release releaseclean tarball changelog.target = ChangeLog changelog.commands = \ svn up && svn2cl --group-by-day --reparagraph changelog.CONFIG = phony icon.target = data/$${TARGET}.png icon.commands = convert data/$${TARGET}.svg data/$${TARGET}.png icon.depends = data/$${TARGET}.svg man.target = data/$${TARGET}.1 man.commands = pod2man --utf8 --center=\"Offlince conference scheduler\" --release=\"Version $${VERSION}\" data/$${TARGET}.pod > data/$${TARGET}.1 man.depends = data/$${TARGET}.pod release.depends = releaseclean tarball releaseclean.commands = \ $(DEL_FILE) data/$${TARGET}.png data/$${TARGET}.1 ChangeLog #releaseclean.CONFIG = phony tarball.target = $${TARGET}-$${VERSION}.tar.gz tarball.commands = \ $(DEL_FILE) -r $${TARGET}-$${VERSION} ; \ $(MKDIR) $${TARGET}-$${VERSION} ; \ $(COPY_DIR) * $${TARGET}-$${VERSION}/ ; \ $(DEL_FILE) $${TARGET}-$${VERSION}/*.pro.user* \ $${TARGET}-$${VERSION}/$${TARGET}-$${VERSION}.tar.gz \ $(DEL_FILE) -r $${TARGET}-$${VERSION}/$${TARGET}-$${VERSION} \ $${TARGET}-$${VERSION}/Makefile ; \ tar -cz --exclude=.svn --exclude=*.tar.gz -f $$tarball.target $${TARGET}-$${VERSION} ; \ $(DEL_FILE) -r $${TARGET}-$${VERSION} tarball.depends = changelog icon man confclerk-0.6.0/AUTHORS0000664000175000017500000000050212156157674014042 0ustar gregoagregoaThis is the AUTHORS file for ConfClerk. ConfClerk is the successor of fosdem-schedule; cf. docs/fosdem-schedule for the historic documentation. Francisco Fortes Matus Hanzes Martin Komara Marek Timko Matus Uzak Monika Berendova Pavol Korinek Pavol Pavelka Maksim Kirillov Philipp Spitzer gregor herrmann Stefan Strahl confclerk-0.6.0/INSTALL0000664000175000017500000000104712156157674014030 0ustar gregoagregoaThis is the INSTALL file for ConfClerk. ConfClerk is the successor of fosdem-schedule; cf. docs/fosdem-schedule for the historic documentation. Note ConfClerk is an application intended for mobile devices like the Nokia N810 and N900. The preferred distribution is using a packaged version for your distribution. Basic Installation 1. Type `qmake' to generate Makefiles. 2. Type `make' to compile the source code. 3. Type `make install' to install the executable. 4. Type `make uninstall' to remove all installed files form your system. confclerk-0.6.0/src/0000775000175000017500000000000012156157674013564 5ustar gregoagregoaconfclerk-0.6.0/src/orm/0000775000175000017500000000000012156157674014361 5ustar gregoagregoaconfclerk-0.6.0/src/orm/ormrecord.h0000664000175000017500000001362212156157674016532 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef ORMRECORD_H #define ORMRECORD_H #include #include #include #include #include #include #include class OrmException { public: OrmException(const QString& text) : mText(text) {} virtual ~OrmException(){} virtual const QString& text() const { return mText; } private: QString mText; }; class OrmNoObjectException : public OrmException { public: OrmNoObjectException() : OrmException("No object exception"){} ~OrmNoObjectException(){} }; class OrmSqlException : public OrmException { public: OrmSqlException(const QString& text) : OrmException( QString("Sql error: ") + text ) {} ~OrmSqlException(){} }; template class OrmRecord : protected QSqlRecord { public: OrmRecord(); static T hydrate(const QSqlRecord& record); void update(QString col, QVariant value = QVariant()); // updates specified column 'col' protected: QVariant value(QString col) const; void setValue(QString col, QVariant value); static T loadOne(QSqlQuery query); static QList load(QSqlQuery query); // auxiliary methods static QSqlRecord toRecord(const QList & columnList); // all record items/columns are in one table static QString columnsForSelect(const QString& prefix = QString()); static QString selectQuery(); static QString updateQuery(); static QVariant convertToC(QVariant value, QVariant::Type colType); static QVariant convertToDb(QVariant value, QVariant::Type colType); }; template OrmRecord::OrmRecord() { QSqlRecord::operator=(T::sColumns); } template T OrmRecord::hydrate(const QSqlRecord& record) { T object; object.QSqlRecord::operator=(record); return object; } // updates specified column 'col' // if the value is not specified as an argument, // it's taken from the record itself // see also: setValue() method for more details template void OrmRecord::update(QString col, QVariant value) { QSqlQuery query; query.prepare(QString(updateQuery() + "SET %1 = :col WHERE id = :id").arg(col)); if(value.isValid()) // take 'col' value from the method's arguments query.bindValue(":col", value); else // take 'col' value from the record; see setValue() query.bindValue(":col", convertToDb(this->value(col), this->value(col).type())); query.bindValue(":id", this->value("id")); query.exec(); } template QVariant OrmRecord::value(QString col) const { return convertToC(QSqlRecord::value(col), T::sColumns.field(col).type()); } template void OrmRecord::setValue(QString col, QVariant value) { QSqlRecord::setValue(col, convertToDb(value, T::sColumns.field(col).type())); } template T OrmRecord::loadOne(QSqlQuery query) { if (!query.isActive()) { if (!query.exec()) { throw OrmSqlException(query.lastError().text()); } } if (!query.next()) { throw OrmNoObjectException(); } return hydrate(query.record()); } template QList OrmRecord::load(QSqlQuery query) { if (!query.isActive()) { if (!query.exec()) { qDebug() << "Error: " << query.lastError().driverText() << "; Type: " << query.lastError().type(); throw OrmSqlException(query.lastError().text()); } } QList objects; while (query.next()) { objects << hydrate(query.record()); } return objects; } template QString OrmRecord::columnsForSelect(const QString& prefix) { QStringList prefixedColumns; for (int i=0; i QString OrmRecord::selectQuery() { return QString("SELECT %1 FROM %2 ").arg(columnsForSelect(), T::sTableName); } template QString OrmRecord::updateQuery() { return QString("UPDATE %1 ").arg(T::sTableName); } template QSqlRecord OrmRecord::toRecord(const QList & columnList) { QSqlRecord record; for(int i=0; i< columnList.count(); i++) { record.append(columnList[i]); } return record; } template QVariant OrmRecord::convertToC(QVariant value, QVariant::Type colType) { if (colType == QVariant::DateTime && value.canConvert()) { QDateTime date; date.setTimeSpec(Qt::UTC); date.setTime_t(value.toUInt()); return date; } return value; } template QVariant OrmRecord::convertToDb(QVariant value, QVariant::Type colType) { if (colType == QVariant::DateTime && value.canConvert()) { QDateTime dateTime = value.toDateTime(); dateTime.setTimeSpec(Qt::UTC); // this is to avoid that dateTime.toTime_t changes the time depending on the local time zone return dateTime.toTime_t(); } return value; } #endif // ORMRECORD_H confclerk-0.6.0/src/orm/orm.pro0000664000175000017500000000024512156157674015701 0ustar gregoagregoaTEMPLATE = lib TARGET = orm DESTDIR = ../bin CONFIG += static QT += sql QMAKE_CLEAN += ../bin/liborm.a # module dependencies DEPENDPATH += . HEADERS += ormrecord.h confclerk-0.6.0/src/db.qrc0000664000175000017500000000021212156157674014653 0ustar gregoagregoa dbschema001.sql dbschema000to001.sql confclerk-0.6.0/src/dbschema000.sql0000664000175000017500000000540112156157674016273 0ustar gregoagregoaBEGIN TRANSACTION; CREATE TABLE CONFERENCE ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , title VARCHAR UNIQUE NOT NULL , subtitle VARCHAR , venue VARCHAR , city VARCHAR NOT NULL , start INTEGER NOT NULL , end INTEGER NOT NULL , days INTEGER , day_change INTEGER , timeslot_duration INTEGER , active INTEGER DEFAULT 0 , url VARCHAR); CREATE TABLE TRACK ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , xid_conference INTEGER NOT NULL , name VARCHAR NOT NULL , UNIQUE (xid_conference, name)); CREATE TABLE ROOM ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , xid_conference INTEGER NOT NULL , name VARCHAR NOT NULL , picture VARCHAR NOT NULL , UNIQUE (xid_conference, name)); CREATE TABLE PERSON ( id INTEGER NOT NULL , xid_conference INTEGER NOT NULL , name VARCHAR NOT NULL , UNIQUE (xid_conference, name) , PRIMARY KEY (id, xid_conference)); CREATE TABLE EVENT ( xid_conference INTEGER NOT NULL , id INTEGER NOT NULL , start INTEGER NOT NULL , duration INTEGER NOT NULL -- duration of the event in seconds , xid_track INTEGER NOT NULL REFERENCES TRACK(id) , type VARCHAR , language VARCHAR , tag VARCHAR , title VARCHAR NOT NULL , subtitle VARCHAR , abstract VARCHAR , description VARCHAR , favourite INTEGER DEFAULT 0 , alarm INTEGER DEFAULT 0 , PRIMARY KEY (xid_conference ,id) , FOREIGN KEY(xid_conference) REFERENCES CONFERENCE(id) , FOREIGN KEY(xid_track) REFERENCES TRACK(id)); CREATE TABLE EVENT_PERSON ( xid_conference INTEGER NOT NULL , xid_event INTEGER NOT NULL , xid_person INTEGER NOT NULL , UNIQUE ( xid_conference , xid_event , xid_person ) ON CONFLICT REPLACE , FOREIGN KEY(xid_conference) REFERENCES CONFERENCE(id) , FOREIGN KEY(xid_conference, xid_event) REFERENCES EVENT(xid_conference, id) , FOREIGN KEY(xid_conference, xid_person) REFERENCES PERSON(xid_conference, id)); CREATE TABLE EVENT_ROOM ( xid_conference INTEGER NOT NULL , xid_event INTEGER NOT NULL , xid_room INTEGER NOT NULL , UNIQUE ( xid_conference , xid_event , xid_room ) ON CONFLICT REPLACE , FOREIGN KEY(xid_conference) REFERENCES CONFERENCE(id) , FOREIGN KEY(xid_conference, xid_event) REFERENCES EVENT(xid_conference, id) , FOREIGN KEY(xid_conference, xid_room) REFERENCES ROOM(xid_conference, id)); CREATE TABLE LINK ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , xid_conference INTEGER NOT NULL , xid_event INTEGER NOT NULL , name VARCHAR , url VARCHAR NOT NULL , UNIQUE ( xid_conference , xid_event , url ) ON CONFLICT REPLACE , FOREIGN KEY(xid_conference) REFERENCES CONFERENCE(id) , FOREIGN KEY(xid_conference, xid_event) REFERENCES EVENT(xid_conference, id)); COMMIT; confclerk-0.6.0/src/global.pri0000664000175000017500000000121112156157674015533 0ustar gregoagregoa# This is 'global.pri' file which defines # GLOBAL definitions for the project # include this file in each "*.pro" file, where it's needed # USAGE: include(./global.pri) # VERSION VERSION = 0.6.0 DEFINES += VERSION=\\\"$$VERSION\\\" # Define 'MAEMO' specific CONFIG/DEFINE # To handle 'MAEMO' specific soruces/code DISTRO = $$system(cat /etc/issue) contains( DISTRO, [Mm]aemo ) { # for 'MAEMO' specific source code parts DEFINES += MAEMO # for eg. including 'MAEMO' specific files CONFIG += maemo } contains( DISTRO, [Ii]nternet ) { contains( DISTRO, [Tt]ablet ) { # Nokia N810 device DEFINES += N810 } } confclerk-0.6.0/src/gui/0000775000175000017500000000000012156157674014350 5ustar gregoagregoaconfclerk-0.6.0/src/gui/dayviewtabcontainer.h0000664000175000017500000000232112156157674020561 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef DAYVIEWTABCONTAINER_H_ #define DAYVIEWTABCONTAINER_H_ #include "tabcontainer.h" class DayViewTabContainer: public TabContainer { Q_OBJECT public: DayViewTabContainer(QWidget *aParent); virtual ~DayViewTabContainer() {} public slots: void expandTimeGroup(QTime time, int conferenceId); protected: virtual void loadEvents(const QDate &aDate, const int aConferenceId ); }; #endif /* DAYVIEWTABCONTAINER_H_ */ confclerk-0.6.0/src/gui/urlinputdialog.cpp0000664000175000017500000000326112156157674020120 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "urlinputdialog.h" #include #include UrlInputDialog::UrlInputDialog(QWidget* parent) : QDialog(parent) { setupUi(this); QPushButton* openFile = buttons->addButton("Open File...", QDialogButtonBox::ActionRole); connect(openFile, SIGNAL(clicked()), SLOT(openFileClicked())); connect(buttons, SIGNAL(accepted()), SLOT(acceptClicked())); connect(buttons, SIGNAL(rejected()), SLOT(rejectClicked())); } void UrlInputDialog::openFileClicked() { QString file = QFileDialog::getOpenFileName(this, "Select Conference Schedule", QString(), "Schedule Files (*.xml);;All Files(*)"); if (file.isNull()) { return; } else { saved_result = file; done(HaveFile); } } void UrlInputDialog::acceptClicked() { saved_result = urlEntry->text(); setResult(HaveUrl); } void UrlInputDialog::rejectClicked() { setResult(Cancel); } confclerk-0.6.0/src/gui/conflictdialogcontainer.cpp0000664000175000017500000000304112156157674021736 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conflictdialogcontainer.h" ConflictDialogContainer::ConflictDialogContainer(QWidget *aParent) : TabContainer( aParent ), mEventId(-1), mConferenceId(-1) {} void ConflictDialogContainer::setEventId(int aEventId, int conferenceId) { mEventId = aEventId; mConferenceId = conferenceId; loadEvents(); } void ConflictDialogContainer::loadEvents() { static_cast(treeView->model())->loadConflictEvents(mEventId, mConferenceId); treeView->setAllExpanded(true); } void ConflictDialogContainer::loadEvents(const QDate &aDate, const int aConferenceId) { Q_UNUSED(aDate); Q_UNUSED(aConferenceId); Q_ASSERT(aConferenceId == mConferenceId); Q_ASSERT(mConferenceId > 0); Q_ASSERT(mEventId > 0); loadEvents(); } confclerk-0.6.0/src/gui/searchhead.cpp0000664000175000017500000000273212156157674017147 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "searchhead.h" #include SearchHead::SearchHead(QWidget *parent) : QWidget(parent) { setupUi(this); QShortcut* shortcutEnter = new QShortcut(QKeySequence(Qt::Key_Enter), this, 0, 0, Qt::WidgetWithChildrenShortcut); connect(shortcutEnter, SIGNAL(activated()), this, SLOT(searchButtonClicked())); QShortcut* shortcutReturn = new QShortcut(QKeySequence(Qt::Key_Return), this, 0, 0, Qt::WidgetWithChildrenShortcut); connect(shortcutReturn, SIGNAL(activated()), this, SLOT(searchButtonClicked())); connect( searchButton, SIGNAL(clicked()), SLOT(searchButtonClicked())); } SearchHead::~SearchHead() { } void SearchHead::searchButtonClicked() { emit( searchClicked() ); } confclerk-0.6.0/src/gui/conferenceeditor.cpp0000664000175000017500000001444312156157674020400 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conferenceeditor.h" #include "conferencemodel.h" #include "urlinputdialog.h" #include "errormessage.h" #include #include #include #include ConferenceEditor::ConferenceEditor(ConferenceModel* model, QWidget* parent) : QDialog(parent) , model(model) , selected_id(-1) { setupUi(this); progressBar->hide(); confView->setModel(model); QItemSelectionModel* confViewSelection = new QItemSelectionModel(model, this); confView->setSelectionModel(confViewSelection); connect(confViewSelection, SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), SLOT(itemSelected(const QModelIndex&, const QModelIndex&))); connect(this, SIGNAL(wantCurrent(const QModelIndex&, QItemSelectionModel::SelectionFlags)), confViewSelection, SLOT(setCurrentIndex(const QModelIndex&, QItemSelectionModel::SelectionFlags))); connect(addBtn, SIGNAL(clicked()), SLOT(addClicked())); connect(removeBtn, SIGNAL(clicked()), SLOT(removeClicked())); connect(changeUrl, SIGNAL(clicked()), SLOT(changeUrlClicked())); connect(refreshBtn, SIGNAL(clicked()), SLOT(refreshClicked())); connect(buttonBox, SIGNAL(rejected()), SLOT(close())); // it's OK to emit selection signals here // because they are not yet connected to anybody int active_id = Conference::activeConference(); if (active_id > 0) { emit wantCurrent(model->indexFromId(active_id), QItemSelectionModel::SelectCurrent); } else { itemSelected(QModelIndex(), QModelIndex()); } } void ConferenceEditor::conferenceRemoved() { if (model->rowCount() > 0) { emit wantCurrent(model->index(0, 0), QItemSelectionModel::SelectCurrent); } else { itemSelected(QModelIndex(), QModelIndex()); } } void ConferenceEditor::itemSelected(const QModelIndex& current, const QModelIndex& previous) { // TODO: fill all required fields Q_UNUSED(previous); if (!current.isValid()) { selected_id = -1; emit noneConferenceSelected(); conferenceInfo->setCurrentIndex(1); removeBtn->hide(); } else { const Conference& conf = model->conferenceFromIndex(current); selected_id = conf.id(); emit haveConferenceSelected(selected_id); conferenceTitle->setText(conf.title()); conferenceSubtitle->setText(conf.subtitle()); conferenceWhere->setText(conf.city() + (!conf.venue().isEmpty() ? ", " + conf.venue() : "")); conferenceWhen->setText( conf.start().toString("yyyy-MM-dd") + " - " + conf.end().toString("yyyy-MM-dd")); conferenceInfo->setCurrentIndex(0); removeBtn->show(); } } void ConferenceEditor::addClicked() { UrlInputDialog url_input(this); switch (url_input.exec()) { case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url(), 0); break; case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url(), 0); break; case UrlInputDialog::Cancel: return; } } void ConferenceEditor::removeClicked() { if (selected_id < 0) { // TODO: disable it when none is selected return; } QMessageBox::StandardButton answer = QMessageBox::question(0 , "Deletion confirmation" , QString("Really delete the %1 conference").arg(Conference::getById(selected_id).title()) , QMessageBox::Yes | QMessageBox::No , QMessageBox::No); if (answer == QMessageBox::Yes) { emit removeConferenceRequested(selected_id); } } void ConferenceEditor::changeUrlClicked() { if (selected_id < 0) return; const Conference& selectedConf = Conference::getById(selected_id); bool ok; QString url = QInputDialog::getText(this, "URL Input", "Enter schedule URL", QLineEdit::Normal, selectedConf.url(), &ok); if (ok) { emit changeUrlRequested(selected_id, url); } } void ConferenceEditor::refreshClicked() { if (selected_id <= 0) return; const Conference& selectedConf = Conference::getById(selected_id); QString url = selectedConf.url(); if (url.isEmpty()) { static const QString format("Schedule URL for %1 is not set. Enter the schedule URL:"); bool ok; url = QInputDialog::getText(this, "URL Input", format.arg(selectedConf.title()), QLineEdit::Normal, QString(), &ok); if (!ok) return; // first save it, to remain if fetch fails emit changeUrlRequested(selected_id, url); } // fetch importStarted(); // just to show the progress bar emit haveConferenceUrl(url, selected_id); } void ConferenceEditor::importStarted() { addBtn->hide(); removeBtn->hide(); buttons->layout()->removeItem(buttonsSpacer); progressBar->setValue(0); progressBar->show(); QApplication::processEvents(); } void ConferenceEditor::showParsingProgress(int progress) { progressBar->setValue(progress); QApplication::processEvents(); } void ConferenceEditor::importFinished(int conferenceId) { addBtn->show(); // removeItem should be shown later, but it takes some time, // and not looks good // anyway it will be shown a bit later removeBtn->show(); buttons->layout()->addItem(buttonsSpacer); progressBar->hide(); QApplication::processEvents(); QModelIndex item = model->indexFromId(conferenceId); if (item.isValid()) emit wantCurrent(item, QItemSelectionModel::SelectCurrent); else itemSelected(QModelIndex(), QModelIndex()); } confclerk-0.6.0/src/gui/conflictsdialog.ui0000664000175000017500000000422512156157674020056 0ustar gregoagregoa ConflictsDialog 0 0 471 373 Dialog Selected Event is in conflict with the following event(s): true 0 1 Qt::Horizontal 40 20 OK ConflictDialogContainer QWidget
conflictdialogcontainer.h
1
okButton clicked() ConflictsDialog close() 301 156 175 89
confclerk-0.6.0/src/gui/favtabcontainer.h0000664000175000017500000000216212156157674017670 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef FAVTABCONTAINER_H_ #define FAVTABCONTAINER_H_ #include "tabcontainer.h" class FavTabContainer: public TabContainer { Q_OBJECT public: FavTabContainer(QWidget *aParent); virtual ~FavTabContainer(){} protected: virtual void loadEvents( const QDate &aDate, const int aConferenceId ); }; #endif /* FAVTABCONTAINER_H_ */ confclerk-0.6.0/src/gui/daynavigatorwidget.ui0000664000175000017500000000311112156157674020577 0ustar gregoagregoa DayNavigatorWidget 0 0 31 138 0 0 Go to next day (Ctrl+Up) Ctrl+Up true Qt::UpArrow Go to previous day (Ctrl+Down) Ctrl+Down true Qt::DownArrow prevDayButtonClicked() nextDayButtonClicked() todayButtonClicked() confclerk-0.6.0/src/gui/favtabcontainer.cpp0000664000175000017500000000206712156157674020227 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "favtabcontainer.h" FavTabContainer::FavTabContainer(QWidget *aParent) : TabContainer( aParent ) { } void FavTabContainer::loadEvents( const QDate &aDate, const int aConferenceId ) { static_cast(treeView->model())->loadFavEvents( aDate, aConferenceId ); } confclerk-0.6.0/src/gui/settingsdialog.cpp0000664000175000017500000000323512156157674020077 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "settingsdialog.h" #include "appsettings.h" #include SettingsDialog::SettingsDialog(QWidget *aParent) : QDialog(aParent) { setupUi(this); connect(directConnection, SIGNAL(clicked(bool)), SLOT(connectionTypeChanged(bool))); } void SettingsDialog::loadDialogData() { // deserialize dialog data address->setText(AppSettings::proxyAddress()); port->setValue(AppSettings::proxyPort()); directConnection->setChecked(AppSettings::isDirectConnection()); proxyWidget->setDisabled(directConnection->isChecked()); } void SettingsDialog::saveDialogData() { // serialize dialog data AppSettings::setProxyAddress(address->text()); AppSettings::setProxyPort(port->value()); AppSettings::setDirectConnection(directConnection->isChecked()); } void SettingsDialog::connectionTypeChanged(bool aState) { proxyWidget->setDisabled(aState); } confclerk-0.6.0/src/gui/conferenceeditor.ui0000664000175000017500000001750712156157674020237 0ustar gregoagregoa ConferenceEditor 0 0 596 267 Edit Conferences :/confclerk.svg:/confclerk.svg 0 0 0 :/icons/add.png:/icons/add.png 0 0 :/icons/remove.png:/icons/remove.png 10 0 0 false Qt::Horizontal 40 20 0 75 true Conference Name Qt::AlignCenter true Conference Subtitle Qt::AlignCenter true 75 true true When: 75 true true Where: DATE (FROM - TO) CITY, CAMPUS Reload from URL :/icons/reload.png:/icons/reload.png Change URL Qt::Horizontal 40 20 Qt::Vertical 20 40 QDialogButtonBox::Close confclerk-0.6.0/src/gui/searchhead.h0000664000175000017500000000226212156157674016612 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef SEARCHHEAD_H #define SEARCHHEAD_H #include #include #include "ui_searchhead.h" class SearchHead : public QWidget, public Ui::SearchHeadClass { Q_OBJECT public: SearchHead(QWidget *parent = 0); ~SearchHead(); signals: void searchClicked(); private slots: void searchButtonClicked(); //private: //Ui::SearchHeadClass ui; }; #endif // SEARCHHEAD_H confclerk-0.6.0/src/gui/trackstabcontainer.cpp0000664000175000017500000000211012156157674020727 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "trackstabcontainer.h" TracksTabContainer::TracksTabContainer( QWidget *aParent ) : TabContainer( aParent ) { } void TracksTabContainer::loadEvents( const QDate &aDate, const int aConferenceId ) { static_cast(treeView->model())->loadEventsByTrack( aDate, aConferenceId ); } confclerk-0.6.0/src/gui/daynavigatorwidget.cpp0000664000175000017500000000737712156157674020766 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "daynavigatorwidget.h" #include #include DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent): QWidget(aParent) { setupUi(this); connect(prevDayButton, SIGNAL(clicked()), SLOT(prevDayButtonClicked())); connect(nextDayButton, SIGNAL(clicked()), SLOT(nextDayButtonClicked())); configureNavigation(); } void DayNavigatorWidget::setDates(const QDate &aStartDate, const QDate &aEndDate) { Q_ASSERT(aStartDate.isValid() && aEndDate.isValid() && aStartDate<=aEndDate); mStartDate = aStartDate; mEndDate = aEndDate; if (!mCurDate.isValid()) mCurDate = mStartDate; // if mCurDate is out of range, set it to mstartDate else if (mCurDate < mStartDate || mCurDate > mEndDate) mCurDate = mStartDate; configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } void DayNavigatorWidget::setCurDate(const QDate& curDate) { Q_ASSERT(curDate.isValid()); if (curDate == mCurDate) return; if (!mStartDate.isValid()) { // the start and end date have not been set mStartDate = curDate; mEndDate = curDate; mCurDate = curDate; } else if (curDate < mStartDate) mCurDate = mStartDate; else if (curDate > mEndDate) mCurDate = mEndDate; else mCurDate = curDate; configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } void DayNavigatorWidget::unsetDates() { mStartDate= QDate(); mEndDate = QDate(); mCurDate = QDate(); configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } void DayNavigatorWidget::configureNavigation() { prevDayButton->setDisabled(!mStartDate.isValid() || mCurDate == mStartDate); nextDayButton->setDisabled(!mEndDate.isValid() || mCurDate == mEndDate); } void DayNavigatorWidget::prevDayButtonClicked() { if(mCurDate <= mStartDate) return; mCurDate = mCurDate.addDays(-1); configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } void DayNavigatorWidget::nextDayButtonClicked() { if(mCurDate >= mEndDate) return; mCurDate = mCurDate.addDays(1); configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) { Q_UNUSED(aEvent); QString selectedDateStr = mCurDate.isValid() ? mCurDate.toString("dddd\nyyyy-MM-dd") : tr("No date"); QPainter painter(this); painter.save(); // rectangle only for the text QRect q(-selectedDate->height()-selectedDate->y(), selectedDate->x(), selectedDate->height(), selectedDate->width()); painter.rotate(270); // font size adjustion, static on maemo, dynamically otherwise QFont f = painter.font(); #ifdef MAEMO qreal factor = 0.8; #else qreal factor = (qreal) 2 * q.width() / painter.fontMetrics().width(selectedDateStr); #endif if (factor < 1) f.setPointSizeF(f.pointSizeF() * factor); painter.setFont(f); painter.drawText(q, Qt::AlignCenter, selectedDateStr); painter.restore(); } confclerk-0.6.0/src/gui/conflictsdialog.cpp0000664000175000017500000000245712156157674020230 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conflictsdialog.h" ConflictsDialog::ConflictsDialog(int aEventId, int aConferenceId, QWidget *aParent) : QDialog(aParent) { setupUi(this); connect(container, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); connect(container, SIGNAL(eventChanged(int,bool)), container, SLOT(loadEvents())); container->setEventId(aEventId, aConferenceId); } ConflictsDialog::~ConflictsDialog() { disconnect(container, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); } confclerk-0.6.0/src/gui/trackstabcontainer.h0000664000175000017500000000221012156157674020375 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef TRACKSTABCONTAINER_H_ #define TRACKSTABCONTAINER_H_ #include "tabcontainer.h" class TracksTabContainer: public TabContainer { Q_OBJECT public: TracksTabContainer( QWidget *aParent ); virtual ~TracksTabContainer() {} protected: virtual void loadEvents( const QDate &aDate, const int aConferenceId ); }; #endif /* TRACKSTABCONTAINER_H_ */ confclerk-0.6.0/src/gui/settingsdialog.h0000664000175000017500000000226212156157674017543 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include #include "ui_settingsdialog.h" class SettingsDialog : public QDialog, Ui::SettingsDialog { Q_OBJECT public: SettingsDialog(QWidget *aParent = NULL); ~SettingsDialog() {} void loadDialogData(); void saveDialogData(); private slots: void connectionTypeChanged(bool aState); }; #endif /* PROXYSETTINGSDIALOG_H */ confclerk-0.6.0/src/gui/conflictdialogcontainer.h0000664000175000017500000000255412156157674021413 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef CONFLICTDIALOGCONTAINER_H #define CONFLICTDIALOGCONTAINER_H #include "tabcontainer.h" class ConflictDialogContainer: public TabContainer { Q_OBJECT public: ConflictDialogContainer(QWidget *aParent); virtual ~ConflictDialogContainer() {} public slots: void setEventId(int aEventId, int conferenceId); void loadEvents(); // update the conflicts protected: virtual void loadEvents(const QDate &aDate, const int aConferenceId); // the date and conference are ignored private: int mEventId; int mConferenceId; }; #endif /* CONFLICTDIALOGCONTAINER_H */ confclerk-0.6.0/src/gui/conflictsdialog.h0000664000175000017500000000224612156157674017671 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef CONFLICTSDIALOG_H #define CONFLICTSDIALOG_H #include "ui_conflictsdialog.h" #include class ConflictsDialog : public QDialog, Ui::ConflictsDialog { Q_OBJECT public: ConflictsDialog(int aEventId, int aConferenceId, QWidget *aParent = NULL); ~ConflictsDialog(); signals: void eventChanged(int aEventId, bool favouriteChanged); }; #endif /* CONFLICTSDIALOG_H */ confclerk-0.6.0/src/gui/eventdialog.ui0000664000175000017500000000560612156157674017217 0ustar gregoagregoa EventDialog 0 0 539 404 0 0 Details false true ... :/icons/alarm-off.png:/icons/alarm-off.png 32 32 CapsLock ... :/icons/favourite-off.png:/icons/favourite-off.png 32 32 Qt::Horizontal 40 20 OK okButton clicked() EventDialog close() 287 84 169 53 confclerk-0.6.0/src/gui/tabcontainer.cpp0000664000175000017500000000637612156157674017541 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "tabcontainer.h" #include #include #include #include "treeview.h" #include "delegate.h" #include "eventdialog.h" #include "room.h" #include "errormessage.h" #include "conflictsdialog.h" TabContainer::TabContainer(QWidget *aParent) : QWidget(aParent) { setupUi(this); treeView->setHeaderHidden(true); treeView->setRootIsDecorated(false); treeView->setIndentation(0); treeView->setAnimated(true); treeView->setModel(new EventModel()); treeView->setItemDelegate(new Delegate(treeView)); connect(treeView, SIGNAL(eventChanged(int,bool)), SIGNAL(eventChanged(int,bool))); connect(treeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &))); connect(treeView, SIGNAL(requestForConflicts(const QModelIndex &)), SLOT(displayConflicts(const QModelIndex &))); } void TabContainer::updateTreeView(const QDate &aDate) { int active_id = Conference::activeConference(); if (active_id > 0) { loadEvents(aDate, active_id); } else { static_cast(treeView->model())->clearModel(); } } void TabContainer::itemClicked(const QModelIndex &aIndex) { // have to handle only events, not time-groups if(!aIndex.parent().isValid()) // time-group return; EventDialog dialog(Conference::activeConference(), static_cast(aIndex.internalPointer())->id(),this); #ifdef N810 dialog.setFixedWidth(static_cast(parent())->width()); #endif connect(&dialog, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); dialog.exec(); disconnect(&dialog, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); } void TabContainer::displayConflicts(const QModelIndex &aIndex) { Event* event = static_cast(aIndex.internalPointer()); ConflictsDialog dialog(event->id(), event->conferenceId(), this); #ifdef N810 dialog.setFixedWidth(static_cast(parent())->width()); #endif connect(&dialog, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); dialog.exec(); disconnect(&dialog, SIGNAL(eventChanged(int,bool)), this, SIGNAL(eventChanged(int,bool))); } void TabContainer::redisplayEvent(int aEventId) { static_cast(treeView->model())->updateModel(aEventId); } void TabContainer::redisplayDate(const QDate& curDate) { updateTreeView(curDate); } void TabContainer::clearModel() { static_cast(treeView->model())->clearModel(); } confclerk-0.6.0/src/gui/gui.pro0000664000175000017500000000360412156157674015661 0ustar gregoagregoainclude(../global.pri) TEMPLATE = lib TARGET = gui DESTDIR = ../bin CONFIG += static QT += sql \ xml \ network QMAKE_CLEAN += ../bin/libgui.a # module dependencies LIBS += -L$$DESTDIR \ -lmvc \ -lorm \ -lsql INCLUDEPATH += ../orm \ ../mvc \ ../sql \ ../app DEPENDPATH += . \ ../orm \ ../mvc \ ../sql POST_TARGETDEPS += $$DESTDIR/liborm.a \ $$DESTDIR/libmvc.a \ $$DESTDIR/libsql.a maemo { LIBS += -L$$DESTDIR \ -lqalarm INCLUDEPATH += ../alarm DEPENDPATH += ../alarm POST_TARGETDEPS += $$DESTDIR/libqalarm.a } # A shamelessly long list of sources, headers and forms. # Please note that resources MUST be added to the app module # (which means they need to be added to the test module as well, # but I am sure you can live with that for the time being). FORMS += searchhead.ui \ mainwindow.ui \ daynavigatorwidget.ui \ about.ui \ eventdialog.ui \ conflictsdialog.ui \ tabcontainer.ui \ settingsdialog.ui \ conferenceeditor.ui \ urlinputdialog.ui HEADERS += roomstabcontainer.h \ trackstabcontainer.h \ favtabcontainer.h \ searchtabcontainer.h \ searchhead.h \ dayviewtabcontainer.h \ conflictdialogcontainer.h \ conflictsdialog.h \ mainwindow.h \ daynavigatorwidget.h \ eventdialog.h \ tabcontainer.h \ settingsdialog.h \ conferenceeditor.h \ urlinputdialog.h SOURCES += roomstabcontainer.cpp \ trackstabcontainer.cpp \ favtabcontainer.cpp \ searchtabcontainer.cpp \ searchhead.cpp \ dayviewtabcontainer.cpp \ conflictdialogcontainer.cpp \ conflictsdialog.cpp \ mainwindow.cpp \ daynavigatorwidget.cpp \ eventdialog.cpp \ tabcontainer.cpp \ settingsdialog.cpp \ conferenceeditor.cpp \ urlinputdialog.cpp HEADERS += errormessage.h SOURCES += errormessage.cpp CONFIG(maemo5) { QT += maemo5 } confclerk-0.6.0/src/gui/roomstabcontainer.cpp0000664000175000017500000000210312156157674020601 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "roomstabcontainer.h" RoomsTabContainer::RoomsTabContainer( QWidget *aParent ) : TabContainer( aParent ) { } void RoomsTabContainer::loadEvents( const QDate &aDate, const int aConferenceId ) { static_cast(treeView->model())->loadEventsByRoom( aDate, aConferenceId ); } confclerk-0.6.0/src/gui/errormessage.cpp0000664000175000017500000000245012156157674017553 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "errormessage.h" #include #include #ifdef QT_MAEMO5_LIB #include #else #include #endif void error_message(const QString& message) { #ifdef QT_MAEMO5_LIB // by default the message is white on yellow, which is unusable // but some html here works // remove it as soon as they fix the colors QMaemo5InformationBox::information(0, "" + message + ""); #else QMessageBox::warning(0, "Error", message); #endif } confclerk-0.6.0/src/gui/tabcontainer.ui0000664000175000017500000000255612156157674017370 0ustar gregoagregoa TabContainer 0 0 568 292 0 0 Form 0 0 1 Qt::ScrollBarAlwaysOn TreeView QTreeView
../mvc/treeview.h
confclerk-0.6.0/src/gui/tabcontainer.h0000664000175000017500000000315012156157674017171 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef TABCONTAINER_H #define TABCONTAINER_H #include #include "ui_tabcontainer.h" #include "conference.h" #include "sqlengine.h" #include "conference.h" #include "eventmodel.h" class TabContainer : public QWidget, public Ui::TabContainer { Q_OBJECT public: TabContainer(QWidget *aParent = NULL); virtual ~TabContainer() {} void clearModel(); protected: virtual void loadEvents( const QDate &aDate, const int aConferenceId ) = 0; signals: void eventChanged(int aEventId, bool aReloadModel); public slots: virtual void redisplayEvent(int aEventId); void redisplayDate(const QDate& curDate); protected slots: virtual void updateTreeView(const QDate &aDate); void itemClicked(const QModelIndex &aIndex); void displayConflicts(const QModelIndex &aIndex); }; #endif /* TABCONTAINER_H */ confclerk-0.6.0/src/gui/settingsdialog.ui0000664000175000017500000000617312156157674017736 0ustar gregoagregoa SettingsDialog 0 0 500 152 0 0 500 0 Settings Proxy Settings Direct connection true Address: Port: 9999 8080 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() SettingsDialog accept() 288 128 325 147 buttonBox rejected() SettingsDialog reject() 202 130 226 147 confclerk-0.6.0/src/gui/dayviewtabcontainer.cpp0000664000175000017500000000371512156157674021124 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "dayviewtabcontainer.h" DayViewTabContainer::DayViewTabContainer(QWidget *aParent): TabContainer(aParent) { } void DayViewTabContainer::expandTimeGroup(QTime time, int conferenceId) { EventModel* eventModel = static_cast(treeView->model()); // iterate over the time groups for (int g = 0; g != eventModel->rowCount(); ++g) { QModelIndex groupIdx = eventModel->index(g, 0); // iterate over the events in the group for (int e = 0; e != eventModel->rowCount(groupIdx); ++e) { QModelIndex eventIdx = eventModel->index(e, 0, groupIdx); int eventId = eventIdx.data().toInt(); Event event = Event::getById(eventId, conferenceId); if (time < event.start().time().addSecs(event.duration())) { // if time < end // expand this group treeView->expand(groupIdx); treeView->scrollTo(eventIdx, QAbstractItemView::PositionAtTop); return; } } } } void DayViewTabContainer::loadEvents( const QDate &aDate, const int aConferenceId ) { static_cast(treeView->model())->loadEvents( aDate, aConferenceId ); } confclerk-0.6.0/src/gui/roomstabcontainer.h0000664000175000017500000000220212156157674020246 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef ROOMSTABCONTAINER_H_ #define ROOMSTABCONTAINER_H_ #include "tabcontainer.h" class RoomsTabContainer: public TabContainer { Q_OBJECT public: RoomsTabContainer( QWidget *aParent ); virtual ~RoomsTabContainer() {} protected: virtual void loadEvents( const QDate &aDate, const int aConferenceId ); }; #endif /* ROOMSTABCONTAINER_H_ */ confclerk-0.6.0/src/gui/searchhead.ui0000664000175000017500000000720612156157674017003 0ustar gregoagregoa SearchHeadClass 0 0 371 153 0 0 10 10 SearchHead Title true Abstract Speaker true Tag Room true type a keyword to search 0 0 Search :/icons/search.png:/icons/search.png false true true false Qt::Vertical 20 20 searchButton searchEdit searchTag searchRoom confclerk-0.6.0/src/gui/eventdialog.h0000664000175000017500000000252212156157674017023 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef EVENTDIALOG_H #define EVENTDIALOG_H #include #include "ui_eventdialog.h" #include "event.h" class EventDialog : public QDialog, Ui::EventDialog { Q_OBJECT public: EventDialog(int conferencdId, int eventId, QWidget *parent = 0); ~EventDialog() {} private slots: void favouriteClicked(); void alarmClicked(); signals: void eventChanged(int aEventId, bool favouriteChanged); // emited when user changes some event details, eg. sets it Favourite private: int mConferenceId; int mEventId; }; #endif /* EVENTDIALOG_H */ confclerk-0.6.0/src/gui/urlinputdialog.h0000664000175000017500000000241512156157674017565 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef URL_INPUT_DIALOG_H #define URL_INPUT_DIALOG_H #include "ui_urlinputdialog.h" class UrlInputDialog : public QDialog, private Ui::UrlInputDialog { Q_OBJECT public: enum { Cancel, HaveUrl, HaveFile }; UrlInputDialog(QWidget* parent); virtual ~UrlInputDialog() { } QString url() { return saved_result; } private slots: void acceptClicked(); void rejectClicked(); void openFileClicked(); private: QString saved_result; }; #endif confclerk-0.6.0/src/gui/mainwindow.h0000664000175000017500000000512412156157674016677 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "ui_mainwindow.h" #include "conferencemodel.h" class ScheduleXmlParser; class QNetworkAccessManager; class QNetworkReply; class MainWindow : public QMainWindow, private Ui::MainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); signals: void conferenceRemoved(); private slots: void on_conferencesAction_triggered(); void on_settingsAction_triggered(); void on_aboutAction_triggered(); void on_reloadAction_triggered(); void on_nowAction_triggered(); void on_searchAction_triggered(); void on_expandAllAction_triggered(); void on_collapseAllAction_triggered(); void onEventChanged(int aEventId, bool favouriteChanged); void onSearchResultChanged(); void networkQueryFinished(QNetworkReply*); void importFromNetwork(const QString&, int conferenceId); void importFromFile(const QString&, int conferenceId); void removeConference(int); void changeConferenceUrl(int, const QString&); void onSystemTrayMessageClicked(); void onAlarmTimerTimeout(); void useConference(int conferenceId); void unsetConference(); void showError(const QString& message); private: void fillAndShowConferenceHeader(); void initTabs(); ///< called on startup and on change of a conference void clearTabs(); void importData(const QByteArray &aData, const QString& url, int conferenceId); QString saved_title; SqlEngine* sqlEngine; ConferenceModel* conferenceModel; ScheduleXmlParser *mXmlParser; QNetworkAccessManager *mNetworkAccessManager; QSystemTrayIcon* systemTrayIcon; ///< to be able to show notifications QTimer* alarmTimer; ///< timer that triggers every minute to be able to show alarms }; #endif /* MAINWINDOW_H */ confclerk-0.6.0/src/gui/mainwindow.ui0000664000175000017500000002066612156157674017075 0ustar gregoagregoa MainWindow 0 0 903 498 400 300 ConfClerk :/confclerk.svg:/confclerk.svg 20 0 1 Qt::ElideRight &Favourites &Day &Tracks &Rooms &Search 0 0 0 0 903 23 Qt::LeftToRight toolBar RightToolBarArea false C&onferences Manage Conferences (Ctrl+O) Ctrl+O S&ettings Ctrl+E &About &Quit Quit (Ctrl+Q) Ctrl+Q :/icons/reload.png:/icons/reload.png Reload Conference Reload Conference (Ctrl+R) Ctrl+R :/icons/today.png:/icons/today.png Jump to now Jump to now (Ctrl+N) Ctrl+N :/icons/search.png:/icons/search.png &Search Search (Ctrl+F) Ctrl+F :/icons/expand.png:/icons/expand.png Expand all Expand all (Ctrl++) Ctrl++ :/icons/collapse.png:/icons/collapse.png Collapse all Collapse all (Ctrl+-) Ctrl+- SearchTabContainer QWidget
searchtabcontainer.h
DayViewTabContainer QWidget
dayviewtabcontainer.h
FavTabContainer QWidget
favtabcontainer.h
TracksTabContainer QWidget
trackstabcontainer.h
RoomsTabContainer QWidget
roomstabcontainer.h
DayNavigatorWidget QWidget
daynavigatorwidget.h
1
quitAction triggered() MainWindow close() -1 -1 451 248
confclerk-0.6.0/src/gui/mainwindow.cpp0000664000175000017500000004030212156157674017227 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "mainwindow.h" #include #include #include #include #include #include "sqlengine.h" #include "track.h" #include "eventmodel.h" #include "delegate.h" #include "room.h" #include "conference.h" #include #include #include "ui_about.h" #include "eventdialog.h" #include "daynavigatorwidget.h" #include "settingsdialog.h" #include "conferenceeditor.h" #include "schedulexmlparser.h" #include "errormessage.h" #include "tabcontainer.h" #include "appsettings.h" const QString PROXY_USERNAME; const QString PROXY_PASSWD; MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) { setupUi(this); // Open database sqlEngine = new SqlEngine(this); searchTabContainer->setSqlEngine(sqlEngine); connect(sqlEngine, SIGNAL(dbError(QString)), this, SLOT(showError(QString))); sqlEngine->open(); sqlEngine->createOrUpdateDbSchema(); conferenceModel = new ConferenceModel(this); mXmlParser = new ScheduleXmlParser(sqlEngine, this); mNetworkAccessManager = new QNetworkAccessManager(this); systemTrayIcon = new QSystemTrayIcon(qApp->windowIcon(), this); alarmTimer = new QTimer(this); alarmTimer->setInterval(60000); alarmTimer->start(); saved_title = windowTitle(); #ifdef N810 tabWidget->setTabText(1,"Favs"); //tabWidget->setTabText(2,"Day"); #endif // first time run aplication: -> let's have it direct connection in this case if(!AppSettings::contains("proxyIsDirectConnection")) AppSettings::setDirectConnection(true); QNetworkProxy proxy( AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy, AppSettings::proxyAddress(), AppSettings::proxyPort(), PROXY_USERNAME, PROXY_PASSWD); QNetworkProxy::setApplicationProxy(proxy); // event details have changed connect(dayTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool))); connect(favsTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool))); connect(tracksTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool))); connect(roomsTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool))); connect(searchTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool))); // date has changed connect(dayNavigator, SIGNAL(dateChanged(QDate)), dayTabContainer, SLOT(redisplayDate(QDate))); connect(dayNavigator, SIGNAL(dateChanged(QDate)), favsTabContainer, SLOT(redisplayDate(QDate))); connect(dayNavigator, SIGNAL(dateChanged(QDate)), tracksTabContainer, SLOT(redisplayDate(QDate))); connect(dayNavigator, SIGNAL(dateChanged(QDate)), roomsTabContainer, SLOT(redisplayDate(QDate))); connect(dayNavigator, SIGNAL(dateChanged(QDate)), searchTabContainer, SLOT(redisplayDate(QDate))); // search result has changed connect(searchTabContainer, SIGNAL(searchResultChanged()), SLOT(onSearchResultChanged())); // systm tray icon connect(systemTrayIcon, SIGNAL(messageClicked()), SLOT(onSystemTrayMessageClicked())); connect(systemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(onSystemTrayMessageClicked())); // timer connect(alarmTimer, SIGNAL(timeout()), SLOT(onAlarmTimerTimeout())); // add the actions from the main menu to the window, otherwise the shortcuts don't work on MAEMO addAction(conferencesAction); addAction(settingsAction); addAction(quitAction); // open conference useConference(Conference::activeConference()); // optimization, see useConference() code try { initTabs(); } catch (const OrmException& e) { qDebug() << "OrmException:" << e.text(); clearTabs(); } connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), SLOT(networkQueryFinished(QNetworkReply*))); connect(mXmlParser, SIGNAL(parsingScheduleBegin()), conferenceModel, SLOT(newConferenceBegin())); connect(mXmlParser, SIGNAL(parsingScheduleEnd(int)), conferenceModel, SLOT(newConferenceEnd(int))); } MainWindow::~MainWindow() { sqlEngine->close(); } void MainWindow::on_aboutAction_triggered() { QDialog dialog(this); Ui::AboutDialog ui; ui.setupUi(&dialog); ui.labDescription->setText(ui.labDescription->text().arg(qApp->applicationVersion())); #ifdef N810 dialog.setFixedWidth(width()); #endif dialog.exec(); } void MainWindow::on_reloadAction_triggered() { int confId = Conference::activeConference(); if (confId== -1) return; Conference active = Conference::getById(confId); if (active.url().isEmpty()) return; importFromNetwork(active.url(), confId); setEnabled(false); } void MainWindow::on_nowAction_triggered() { int confId = Conference::activeConference(); if (confId== -1) return; dayNavigator->setCurDate(QDate::currentDate()); dayTabContainer->expandTimeGroup(QTime::currentTime(), confId); } void MainWindow::on_searchAction_triggered() { if (tabWidget->currentWidget() == searchTab) searchTabContainer->showSearchDialog(!searchTabContainer->searchDialogIsVisible()); else { tabWidget->setCurrentWidget(searchTab); searchTabContainer->showSearchDialog(); } } void MainWindow::on_expandAllAction_triggered() { if (tabWidget->currentWidget() == favouritesTab) favsTabContainer->treeView->expandAll(); if (tabWidget->currentWidget() == dayViewTab) dayTabContainer->treeView->expandAll(); if (tabWidget->currentWidget() == tracksTab) tracksTabContainer->treeView->expandAll(); if (tabWidget->currentWidget() == roomsTab) roomsTabContainer->treeView->expandAll(); if (tabWidget->currentWidget() == searchTab) searchTabContainer->treeView->expandAll(); } void MainWindow::on_collapseAllAction_triggered() { if (tabWidget->currentWidget() == favouritesTab) favsTabContainer->treeView->collapseAll(); if (tabWidget->currentWidget() == dayViewTab) dayTabContainer->treeView->collapseAll(); if (tabWidget->currentWidget() == tracksTab) tracksTabContainer->treeView->collapseAll(); if (tabWidget->currentWidget() == roomsTab) roomsTabContainer->treeView->collapseAll(); if (tabWidget->currentWidget() == searchTab) searchTabContainer->treeView->collapseAll(); } void MainWindow::onEventChanged(int aEventId, bool favouriteChanged) { dayTabContainer->redisplayEvent(aEventId); if (favouriteChanged) favsTabContainer->redisplayDate(dayNavigator->curDate()); else favsTabContainer->redisplayEvent(aEventId); tracksTabContainer->redisplayEvent(aEventId); roomsTabContainer->redisplayEvent(aEventId); searchTabContainer->redisplayEvent(aEventId); } void MainWindow::onSearchResultChanged() { // Are results found on the current date? QDate date = dayNavigator->curDate(); int count = searchTabContainer->searchResultCount(date); if (count > 0) {searchTabContainer->redisplayDate(date); return;} // Are results found in the future? for (date = date.addDays(1); date <= dayNavigator->endDate(); date = date.addDays(1)) { int count = searchTabContainer->searchResultCount(date); if (count > 0) {dayNavigator->setCurDate(date); return;} } // Are results found in the past? for (date = dayNavigator->startDate(); date < dayNavigator->curDate(); date = date.addDays(1)) { int count = searchTabContainer->searchResultCount(date); if (count > 0) {dayNavigator->setCurDate(date); return;} } // No results were found searchTabContainer->redisplayDate(dayNavigator->curDate()); } void MainWindow::onSystemTrayMessageClicked() { systemTrayIcon->hide(); } void MainWindow::onAlarmTimerTimeout() { // determine if an alarm is set on an event that's starting soon QList events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), Conference::activeConference()); if (events.empty()) return; // build a message string Event event; QString title; QString message; if (events.size() == 1) { event = events.first(); title = tr("Next event at %1").arg(event.start().toString("HH:mm")); message = tr("\"%1\"\n(%2)").arg(event.title()).arg(event.room()->name()); } else { title = tr("%1 upcoming events").arg(events.size()); QStringList messages; foreach (event, events) { messages += tr("%1: \"%2\" (%3)").arg(event.start().toString("HH:mm")).arg(event.title()).arg(event.room()->name()); } message = messages.join("\n"); } // and delete the corresponding alarm foreach (event, events) { event.setHasAlarm(false); event.update("alarm"); onEventChanged(event.id(), false); } // show message systemTrayIcon->show(); // The next two lines are to prevent a very strange position of the message box the first time at X11/aweseome (not Win32/XP) systemTrayIcon->showMessage("ConfClerk", "Your upcoming events", QSystemTrayIcon::Information); qApp->processEvents(); systemTrayIcon->showMessage(title, message, QSystemTrayIcon::Information, 60*60*24*1000); QApplication::alert(this); QApplication::beep(); } void MainWindow::useConference(int conferenceId) { if (conferenceId == -1) // in case no conference is active { unsetConference(); return; } try { int oldActiveConferenceId = Conference::activeConference(); bool switchActiveConference = conferenceId != oldActiveConferenceId; if (switchActiveConference) Conference::getById(oldActiveConferenceId).update("active", 0); Conference activeConference = Conference::getById(conferenceId); if (switchActiveConference) activeConference.update("active",1); // looks like it does not work at n900 setWindowTitle(activeConference.title()); // optimization. // dont run initTabs() here // it takes much CPU, making travelling between conferences in ConferenceEditor longer // and is not seen in maemo WM anyway // instead run it explicitly // 1. at startup // 2. when ConferenceEditor finished // dont forget to protect the calls by try-catch! // just in case, clear conference selection instead clearTabs(); // end of optimization // initTabs(); } catch (OrmException& e) { // cannon set an active conference unsetConference(); // TODO: as no active conference is now correctly managed this should be handled as a fatal error return; } } void MainWindow::initTabs() { int confId = Conference::activeConference(); if (confId != -1) // only init tabs if a conference is active { Conference active = Conference::getById(confId); QDate startDate = active.start(); QDate endDate = active.end(); // 'dayNavigator' emits signal 'dateChanged' after setting valid START:END dates dayNavigator->setDates(startDate, endDate); nowAction->trigger(); } } void MainWindow::clearTabs() { dayTabContainer->clearModel(); tracksTabContainer->clearModel(); roomsTabContainer->clearModel(); favsTabContainer->clearModel(); searchTabContainer->clearModel(); } void MainWindow::unsetConference() { clearTabs(); dayNavigator->unsetDates(); setWindowTitle(saved_title); } void MainWindow::showError(const QString& message) { error_message(message); } void MainWindow::on_settingsAction_triggered() { SettingsDialog dialog; dialog.loadDialogData(); if (dialog.exec() == QDialog::Accepted) { dialog.saveDialogData(); QNetworkProxy proxy( AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy, AppSettings::proxyAddress(), AppSettings::proxyPort(), PROXY_USERNAME, PROXY_PASSWD); QNetworkProxy::setApplicationProxy(proxy); } } /** Create and run ConferenceEditor dialog, making required connections for it. This method manages, which classes actually perform changes in conference list. There are several classes that modify the conferences: this: deletion and URL update. this, mXmlParser and mNetworkAccessManager: addition and refresh. */ void MainWindow::on_conferencesAction_triggered() { ConferenceEditor dialog(conferenceModel, this); connect(&dialog, SIGNAL(haveConferenceUrl(const QString&, int)), SLOT(importFromNetwork(const QString&, int))); connect(&dialog, SIGNAL(haveConferenceFile(const QString&, int)), SLOT(importFromFile(const QString&, int))); connect(&dialog, SIGNAL(removeConferenceRequested(int)), SLOT(removeConference(int))); connect(&dialog, SIGNAL(changeUrlRequested(int, const QString&)), SLOT(changeConferenceUrl(int, const QString&))); connect(&dialog, SIGNAL(haveConferenceSelected(int)), SLOT(useConference(int))); connect(&dialog, SIGNAL(noneConferenceSelected()), SLOT(unsetConference())); connect(mXmlParser, SIGNAL(parsingScheduleBegin()), &dialog, SLOT(importStarted())); connect(mXmlParser, SIGNAL(progressStatus(int)), &dialog, SLOT(showParsingProgress(int))); connect(mXmlParser, SIGNAL(parsingScheduleEnd(int)), &dialog, SLOT(importFinished(int))); connect(this, SIGNAL(conferenceRemoved()), &dialog, SLOT(conferenceRemoved())); dialog.exec(); // optimization, see useConference() code try { initTabs(); } catch (OrmException) { clearTabs(); } } void MainWindow::networkQueryFinished(QNetworkReply *aReply) { if (aReply->error() != QNetworkReply::NoError) { error_message(QString("Error occured during download: ") + aReply->errorString()); } else { QUrl redirectUrl = aReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if (!redirectUrl.isEmpty()) { if (redirectUrl != aReply->request().url()) { importFromNetwork(redirectUrl.toString(), aReply->request().attribute(QNetworkRequest::User).toInt()); return; // don't enable controls } else { error_message(QString("Error: Cyclic redirection from %1 to itself.").arg(redirectUrl.toString())); } } else { importData(aReply->readAll(), aReply->url().toEncoded(), aReply->request().attribute(QNetworkRequest::User).toInt()); } } setEnabled(true); } void MainWindow::importData(const QByteArray &aData, const QString& url, int conferenceId) { mXmlParser->parseData(aData, url, conferenceId); } void MainWindow::importFromNetwork(const QString& url, int conferenceId) { QNetworkRequest request; request.setUrl(QUrl(url)); request.setAttribute(QNetworkRequest::User, conferenceId); mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy()); mNetworkAccessManager->get(request); } void MainWindow::importFromFile(const QString& filename, int conferenceId) { QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { static const QString format("Cannot read \"%1\": error %2"); error_message(format.arg(filename, QString::number(file.error()))); } importData(file.readAll(), "", conferenceId); } void MainWindow::removeConference(int id) { sqlEngine->deleteConference(id); conferenceModel->conferenceRemoved(); emit conferenceRemoved(); } void MainWindow::changeConferenceUrl(int id, const QString& url) { Conference::getById(id).setUrl(url); } confclerk-0.6.0/src/gui/daynavigatorwidget.h0000664000175000017500000000377312156157674020427 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef DAYNAVIGATORWIDGET_H #define DAYNAVIGATORWIDGET_H #include "ui_daynavigatorwidget.h" #include #include /** The DayNavigator widget manages three dates, the startDate, curDate and endDate. Either startDate, curDate and endDate all have to be valid and startDate <= curDate <= endDate, OR all three dates are invalid (representing "no date range", e.g. no conference). */ class DayNavigatorWidget : public QWidget, private Ui::DayNavigatorWidget { Q_OBJECT public: DayNavigatorWidget(QWidget *aParent = NULL); ~DayNavigatorWidget() {} void setDates(const QDate &aStartDate, const QDate &aEndDate); void setCurDate(const QDate& curDate); QDate startDate() const {return mStartDate;} QDate curDate() const {return mCurDate;} QDate endDate() const {return mEndDate;} void unsetDates(); protected: void paintEvent(QPaintEvent *); void configureNavigation(); private slots: void prevDayButtonClicked(); void nextDayButtonClicked(); signals: void dateChanged(const QDate &aDate); private: QDate mStartDate; QDate mEndDate; QDate mCurDate; }; #endif /* DAYNAVIGATORWIDGET_H */ confclerk-0.6.0/src/gui/searchtabcontainer.h0000664000175000017500000000321512156157674020361 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef SEARCHTAB_H_ #define SEARCHTAB_H_ #include #include "tabcontainer.h" #include "searchhead.h" #include "sqlengine.h" class SearchTabContainer: public TabContainer { Q_OBJECT private: SqlEngine* sqlEngine; public: SearchTabContainer(QWidget *aParent); virtual ~SearchTabContainer() {} void setSqlEngine(SqlEngine* sqlEngine) {this->sqlEngine = sqlEngine;} bool searchDialogIsVisible() const; int searchResultCount(const QDate& date) const; ///< returns the number of events found on that specific date protected: virtual void loadEvents( const QDate &aDate, const int aConferenceId ); signals: void searchResultChanged(); public slots: void showSearchDialog(bool show=true); private slots: void searchButtonClicked(); private: SearchHead *header; QToolButton *searchAgainButton; }; #endif /* SEARCHTAB_H_ */ confclerk-0.6.0/src/gui/about.ui0000664000175000017500000002135412156157674016026 0ustar gregoagregoa AboutDialog Qt::WindowModal 0 0 460 570 0 0 77 77 500 1000 239 235 231 239 235 231 239 235 231 239 235 231 255 255 255 239 235 231 About application Qt::ScrollBarAlwaysOff true 0 0 438 517 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/confclerk.svg" width="77" style="float: right;" /></p> <p style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">ConfClerk</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Successor of FOSDEM schedule<br /></span>Version %1</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.toastfreeware.priv.at/confclerk/"><span style=" text-decoration: underline; color:#0057ae;">http://www.toastfreeware.priv.at/confclerk/</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ConfClerk is an application written in Qt, which makes conference schedules available offline. It displays the conference schedule from various views, supports searches on various items (speaker, speech topic, location, etc.) and enables you to select favorite events and create your own schedule. At the moment ConfClerk is able to import schedules in XML format created by the PentaBarf conference management system used by e.g. FOSDEM, DebConf, FrOSCon, and the CCC.</p> <p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large; font-weight:600;">Developers</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Berendova Monika, Hanzes Matus, Komara Martin, Korinek Pavol, Pavelka Pavol, Timko Marek, Uzak Matus, Fortes Francisco, Philipp Spitzer, gregor herrmann</p> <p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large; font-weight:600;">Copyright and license</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ConfClerk is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ConfClerk is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 2010 Ixonos Plc.<br />Copyright (C) 2011-2013 Philipp Spitzer &amp; gregor herrmann</p></body></html> Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true true Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Qt::Horizontal 40 20 OK okButton clicked() AboutDialog close() 512 724 282 375 confclerk-0.6.0/src/gui/eventdialog.cpp0000664000175000017500000001133412156157674017357 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "eventdialog.h" #include "conference.h" #include #ifdef MAEMO #include "alarm.h" #include "appsettings.h" #endif EventDialog::EventDialog(int conferenceId, int eventId, QWidget *parent): QDialog(parent), mConferenceId(conferenceId), mEventId(eventId) { setupUi(this); #ifdef MAEMO showFullScreen(); #endif Event event = Event::getById(mEventId, mConferenceId); QString info; // title info.append(QString("

%1

\n").arg(event.title())); // persons info += QString("

%1

\n").arg(tr("Persons")); info += QString("

%1

\n").arg(event.persons().join(", ")); // abstract info += QString("

%1

\n").arg(tr("Abstract")); info += QString("

%1

\n").arg(event.abstract()); // description info += QString("

%1

\n").arg(tr("Description")); info += QString("

%1

\n").arg(event.description()); // links info += QString("

%1

\n
    \n").arg(tr("Links")); QMapIterator i(event.links()); while (i.hasNext()) { i.next(); QString url(i.value()); QString name(i.key()); if (url.isEmpty() || url == "http://") continue; if (name.isEmpty()) name = url; info += QString("
  • %2
  • \n").arg(url, name); } info += QString("
\n"); eventInfoTextBrowser->setHtml(info); // make sure colours are the same as usual eventInfoTextBrowser->setPalette(qApp->palette()); // reduce font size, on maemo #ifdef MAEMO QFont font = eventInfoTextBrowser->font(); font.setPointSizeF(font.pointSizeF()*0.8); eventInfoTextBrowser->setFont(font); #endif connect(favouriteButton, SIGNAL(clicked()), SLOT(favouriteClicked())); connect(alarmButton, SIGNAL(clicked()), SLOT(alarmClicked())); if(event.isFavourite()) { favouriteButton->setIcon(QIcon(":/icons/favourite-on.png")); } if(event.hasAlarm()) { alarmButton->setIcon(QIcon(":/icons/alarm-on.png")); } } void EventDialog::favouriteClicked() { Event event = Event::getById(mEventId, mConferenceId); QList conflicts = Event::conflictEvents(event.id(), mConferenceId); if(event.isFavourite()) { event.setFavourite(false); favouriteButton->setIcon(QIcon(":/icons/favourite-off.png")); } else { event.setFavourite(true); favouriteButton->setIcon(QIcon(":/icons/favourite-on.png")); } event.update("favourite"); if(event.isFavourite()) { // event has became 'favourite' and so 'conflicts' list may have changed conflicts = Event::conflictEvents(event.id(), mConferenceId); } // have to emit 'eventChanged' signal on all events in conflict for(int i=0; isetIcon(QIcon(":/icons/alarm-off.png")); #ifdef MAEMO // remove alarm from the 'alarmd' alarms list Alarm alarm; alarm.deleteAlarm(event.conferenceId(), event.id()); // TODO: test if removing was successfull #endif /* MAEMO */ } else { event.setHasAlarm(true); alarmButton->setIcon(QIcon(":/icons/alarm-on.png")); #ifdef MAEMO // add alarm to the 'alarmd' Alarm alarm; alarm.addAlarm(event.conferenceId(), event.id(), event.title(), event.start().addSecs(-AppSettings::preEventAlarmSec())); #endif /* MAEMO */ } event.update("alarm"); // since the Alarm icon has changed, update TreeView accordingly // all TreeViews have to listen on this signal emit eventChanged(event.id(), false); } confclerk-0.6.0/src/gui/conferenceeditor.h0000664000175000017500000000455012156157674020043 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef CONFERENCE_EDITOR_H #define CONFERENCE_EDITOR_H #include "ui_conferenceeditor.h" #include class ConferenceModel; /** ConferenceEditor clas is used for managing list of conferences. That is, selecting an active conference, adding a new conference from URL or file, removing a conference, refreshing a conference from URL that is saved in the DB. It does not do anything of this itself, instead emitting controlling signals. On the ConferenceEditor creation, they are connected to proper listeners. \see MainWindow::showConferences() */ class ConferenceEditor : public QDialog, private Ui::ConferenceEditor { Q_OBJECT public: ConferenceEditor(ConferenceModel* model, QWidget* parent); virtual ~ConferenceEditor() { } signals: void haveConferenceSelected(int id); void noneConferenceSelected(); void haveConferenceUrl(const QString& url, int conferenceId); void haveConferenceFile(const QString& path, int conferenceId); void removeConferenceRequested(int id); void changeUrlRequested(int, const QString&); void wantCurrent(const QModelIndex&, QItemSelectionModel::SelectionFlags); public slots: void importStarted(); void importFinished(int conferenceId); void conferenceRemoved(); void showParsingProgress(int); private slots: void itemSelected(const QModelIndex& current, const QModelIndex& previous); void addClicked(); void removeClicked(); void changeUrlClicked(); void refreshClicked(); private: ConferenceModel* model; int selected_id; QString import_in_progress_title; }; #endif confclerk-0.6.0/src/gui/urlinputdialog.ui0000664000175000017500000000326612156157674017760 0ustar gregoagregoa UrlInputDialog 0 0 URL Input Enter schedule URL Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Open buttons accepted() UrlInputDialog accept() 248 254 157 274 buttons rejected() UrlInputDialog reject() 316 260 286 274 confclerk-0.6.0/src/gui/errormessage.h0000664000175000017500000000162012156157674017216 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef ERRORMESSAGE_H #define ERRORMESSAGE_H #include void error_message(const QString& message); #endif confclerk-0.6.0/src/gui/searchtabcontainer.cpp0000664000175000017500000000732112156157674020716 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "searchtabcontainer.h" #include "searchhead.h" #include SearchTabContainer::SearchTabContainer(QWidget *aParent): TabContainer(aParent), sqlEngine(0) { header = new SearchHead(this); header->setObjectName(QString::fromUtf8("header")); QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); //sizePolicy.setHeightForWidth(TabContainer::sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(header->sizePolicy().hasHeightForWidth()); header->setSizePolicy(sizePolicy); header->setMinimumSize(QSize(10, 10)); verticalLayout->insertWidget(0,header); connect(header, SIGNAL(searchClicked()), SLOT(searchButtonClicked())); showSearchDialog(); } bool SearchTabContainer::searchDialogIsVisible() const { return header->isVisible(); } int SearchTabContainer::searchResultCount(const QDate& date) const { int confId = Conference::activeConference(); if (confId == -1) return 0; return Event::getSearchResultByDate(date, confId, "start, duration").count(); } void SearchTabContainer::showSearchDialog(bool show) { header->setVisible(show); treeView->setVisible(!show); if (show) header->searchEdit->setFocus(Qt::OtherFocusReason); } void SearchTabContainer::searchButtonClicked() { if (!sqlEngine) return; QHash columns; SearchHead *searchHeader = static_cast(header); if( searchHeader->searchTitle->isChecked() ) columns.insertMulti("EVENT", "title"); if( searchHeader->searchAbstract->isChecked() ) columns.insertMulti("EVENT", "abstract"); if( searchHeader->searchTag->isChecked() ) columns.insertMulti("EVENT", "tag"); if( searchHeader->searchSpeaker->isChecked() ) columns["PERSON"] = "name"; if( searchHeader->searchRoom->isChecked() ) columns["ROOM"] = "name"; QString keyword = searchHeader->searchEdit->text(); int confId = Conference::activeConference(); if (confId == -1) return; Conference conf = Conference::getById(confId); sqlEngine->searchEvent( confId, columns, keyword ); int nrofFounds = 0; for (QDate d = conf.start(); d <= conf.end(); d = d.addDays(1)) nrofFounds += Event::getSearchResultByDate(d, confId, "start, duration").count(); if (!nrofFounds) { treeView->hide(); header->show(); QMessageBox::information( this, QString("Keyword '%1' not found!").arg(keyword), QString("No events containing '%1' found!").arg(keyword), QMessageBox::Ok); } else { treeView->show(); header->hide(); emit searchResultChanged(); } } void SearchTabContainer::loadEvents( const QDate &aDate, const int aConferenceId ) { static_cast(treeView->model())->loadSearchResultEvents( aDate, aConferenceId ); } confclerk-0.6.0/src/icons/0000775000175000017500000000000012156157674014677 5ustar gregoagregoaconfclerk-0.6.0/src/icons/collapse.png0000664000175000017500000000070112156157674017205 0ustar gregoagregoaPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<>IDATX?j`\jk*C7E@f l*Gz+ALUO ||0y$0 ȲL8UU( c\7/xXUp\4M_QQCq=$YX<^zP<<p FTd mҹPUC E5Gc ;I0 \P9p]wZwSsa/at ~w1VY.ˍC  dVK + jҿߚݴ]BIENDB`confclerk-0.6.0/src/icons/dialog-warning.png0000644000175000017500000000327012156157674020307 0ustar gregoagregoaPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<5IDATXõkWg̼{.P ݪИ|kZ,jZ1*RC?TSb#4?xI&oJlmZ`([vey/3s.~xwe$O3ϜIfr7V8`]#}l\z9|B%{<^~#uVwTynj%w`pKvo58=jpJ~aR9Kl;0 [WS]K4CwKrR0 2?x-k^@%+Ȟ<"zXG̾ٝ-r=<$&{_OV8XG`$t?OuxV yLy nnhLi 5N_:e}N4iYw`.܍lE2:NzIKD۲${ K'1*F!`-^K/"btB4vQ튎M;>4@`g=51{=V\V JkR0*FGD8(bSi:F0*5v2{}M\k5cUB4> avl6UOبQ1͠2(k s&XpJwpbm{ͷ9q4FŸ \$`uI.U`|^SFDanxhr$n[*;+yLSΣ.@G`b `٣zG:, !e`D|-z\MĠc>uc0^"L<5N?fC~R<(+^|4?QF+2D T>A4MFQc)}tߖ xQ؈xFŤWM+߄x*|c||CT Lu]0C0BR9l[r<c8R׳.GUȮxHn`Tp&ԄqKa,.pP(yۅN^˪vQ"@'U2dM]8S#G9}B~>Gڭ.ImEw}JxqV 1? z\!MWsޖm7!B֕i#o}`vy*hQbpȯ݂#]5Xky7IFP.磵:l*ABgmޚudB0. ;z0`hj8րhj^m ٮkU@~Wk;Bm ;C qz FYg,.ϏCwޚc;HEG3L}k+"Q;Eq0K bӞa@J@nB]\:a#΢vQHd^Pܡ3KWgI>>rnWxB0eP/?! 4}anhj썊ʱ \Gi 7-4sΆB;ڥN4OIENDB`confclerk-0.6.0/src/icons/remove.png0000664000175000017500000000116112156157674016701 0ustar gregoagregoaPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleOptical Drive>g IDATX햱@MBt SP  */sP@ANwJHSڱ%PXrV#Nfv&Ib̑>L0Eom\%B !k-_olOGTiճ|PM3 x$\m߸_t.ޕ?.Vˣ bμy(F_^zl6#P}_UNV'Dϟ,p}>;.o;)"]13 r v[=~ȋ4h9O nn6HOg _+;]¡ll?:xzrFlʀ image/svg+xml confclerk-0.6.0/src/icons/favourite-on.png0000664000175000017500000000322212156157674020022 0ustar gregoagregoaPNG  IHDR szz pHYsgRDIDATXŗm}ݻMbMjmj%hEEC"-B1 mPL?PK|5iLּt{ݛ޽o{,4f< 7gΜsFgԜ YD-ˁU=tXB"w'J[W3c/$S)3,eNj?~[Vի~ G}XcnvA!J9C8sr+ *1<p / ߀*P8 (_\ȧ xxc`48NJ|kh)%@ zoRŜODDGSHV >%jd=*`Vz1&!ZAFVpjebQih̀C`1猁g+t#\!ۿ'pId y8(ǭyt ʳLDo5рz>~grp]V7̨J)|7;{9\XAەI$|)87#g|xTTX x,$ʀDa(M8q,1B]%Jצ_[Xy+mn^ҭ$Sm]trw*jN Gy(bDUD: U]'0kn/?>:]VGwpdǓHm6bҙ>:iomgG>b*+"M ܼynq_sa ԑm#|;pMK,!G:C#gLD [!46@f{TK@4_:yɷ@9N K+%\'Z-6Z=85A. A7wAS_P=(O㋵{8E%{O9[Q7 [zQzWB!?S=?s 1 d-VF83B`7K&GoHMuz}(@bv| ֮&rDڊ'1?L57}E`'+ ?+?Xr wSM:Ob_Fy2}i9Ȑk2wfyQi؜yDdReJ9+"Y]B|m"fgOfEd^K g IDATXŖi^er}w_fv6 #v ZH)V jOF *QĢ`HHqIB. @ TC- ݦfS3JMOnr{99!|4Kԏ \!WƧ: X@qr"؜I2042 "9Xlmm.f2R,(J`"ϟoR VǶ#ϯLIM]E,;1OdG:$ Z8,/,TI۩Tܘj(jl[hLL]JKi?u$:*3Dr!.|\Od3q JzBZgh n,%2J;\qt]vR<mp#`1)'*74t!CV7t@Ae,eh PHbƘn,;wEb2wPHk|*,oDCv,[.UbbJTG JvuE 76αcBjyFe+ l,ipaӇKx)Y\ 8:?>w7nlfJ} wZQ†! Uym._=As\!f651Fb1FESSǹ$(*RFjy]r [ܖxKr]8/plrl؆iN?)]}m3#g1EљVeIiJL!Ѳ]UgO[6FYae[pGC2\NY˳++-+b?=r.^?&.crz.d"x_|̔ \(Js?:.j*mne8we{Cs7t!̛2;1k kvg1KQ}]\dYǐWq` ɳ__1@o/aTX]1H!>XS+[rEg 1nE|ķ.NXZaY abцv4O>r&wjhW+DnېRjW$PFa{"\ȰB`2WEP4kx9dH|˚(nan =c!QO+O |tXFsDѐJDQ- ;U-U+J>3$X@DDRNֶD5pдR(.\& @l[$Z XG׵FgJhD&PX(ȅm,z!@   QjB^x|^fd X˲#mz'N./I\Z=sEe BW%CAAY]@v\z3,]_Ag IDATXŗo\E?|wql'/425D$zĿ!wHHkJqlB:{C;?-hOw;|wo̸q.Sn»dW\8'{on/bf`tcO[^[ZA`qaG\x!D./ANv"A3"c6$R`(JTt9&B)b"50oIeM 9fn4u4%sEU{b?V~Dd=,=y+X;{sBΥ!ҙ~NCyVǚk R*/d~׳'c4jofM;LMf'@` " V7C y}ѻ>3 GkWiZjol RRy fV!&*K nuc?CD('dp}2ovcw ! %Y^;,,͝t`e0SVg0c}<Kk714Րeݷ: SllIɘ_(:*w,g+R|yxfM  nC) LydYiy"Y뤮i |eXSR/*<$<:U8c*dZdG?`#&LD*Ie#A|a;sxA }3*`3QfSF2Y!%ȪLu m`f&"5MVQ9Dɀ o0͎5^C=oIDjgnLsb[/ٚxt /qb[U6hAh'a"ЇG~/ܰ9Ķ=O,oJm0_u{b%U%= oJmgP+UiPIdyUP;W:nѠҬomv'y~q:.[RIENDB`confclerk-0.6.0/src/icons/favourite-off.png0000664000175000017500000000263212156157674020164 0ustar gregoagregoaPNG  IHDR szz pHYsgRLIDATXŖmlSUM[Xa0Fa #a'ƌfDQF 1 $DAd60 ˀXe?kQOr6s<s ñ|D XsO ,Y_|xkVrrrK xv!!qY.]Z W,{^f3:n6TDn *~gZZPU ?,. ǃFӴ*"`˗i;w \r.r P@ @WWq+po˟-#^477,5MC!IƍC1 s~?uBˑ~zIMUdd))) @*@__onbtviZJo*,MC|F IХ?~mN><FYÏJ$?q8PUEYdff@OZZZkMMNݻ F[OR,!Xa 6)FNEQx"o5;d^za… YnWDpX]WGAEs`0Q9v1V֑6?D>`fi ΧNcxm,|4'azP0XRQĉ'xѬxvVV%G|cvI ad"hU>ix$dYΉ $ Ht:u 7 >tmmm:(]hxۋl6 #ICft{%H@tSZi Û0Mܳ+)((@UU9v( C%#Յb캕৚1s&UUcJOo^rV%r'Ϋt:szGΗW=BUu5> /7 ,\Ҕ#op\DFM?`Yi8v^/[}9Fyrss7yh={p\Ȳ^Oz/0 !WEn Dwww .!z!DVD!sBs;NCqW lBDZzkIvSf q"N5L=ȿ<)i3IENDB`confclerk-0.6.0/src/icons/alarm-on.png0000664000175000017500000000316012156157674017113 0ustar gregoagregoaPNG  IHDR szz pHYsgR"IDATXŗYl\W{qZWqݖQP BDR^@ @QR%!ZTBZBZ5RgwLPⴎrrϿ*RJnҶgog+!ܪ}PJi+28&WƤcd"-@z;#qwE'6;&q"oKwO8pxo(oteh鸭/ Ė7d[Vfuf>Nv'SRm`im >K1Mh@vmGō Swǟ+wwuC@Z{3S c?AG5BEQkGcNk9,ua#\*׺F 025~WBGPU@Q@i'TǽvEOag<{88029PP˨* "ڈƻI$QCqlrLKeeY3# x>*WœZ#j(r2Fq]רԍז:=Sb4 &IDP.feT ؎Ĵa~8m;n8\.zΞxP˚De $z>b,,-, STk&R1ͿF/R@iB)#*Ur.Y[H\+ Ykc#EӼxA)sfaPDZVP| (Sc;MH|\l۾9$3闙% iG @J|)~ Ep6H=ccy,-ԔBc۝{}pd ǍbY%՘GHD EiHmu;d3Cx !An-ށ=u\{ hl t0 31"mJʺ  DH|Y$E:uyYJ~x$;":Z.'ߒlJ!l ekkT5D"D8z7F\sJoAF,b(!|Mnh8W,G9s2S˜9ah {CMh z.APUwMHtg'V^ y b{~i8KvG&^E(F}3 y M*[< `8 {{o1*f'B'OBJO/+W%`܁B~%4o:08_+z8u*ʚĎIENDB`confclerk-0.6.0/src/icons/alarm.blend0000664000175000017500000172041012156157674017006 0ustar gregoagregoaBLENDER_v262REND SceneTEST t```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````˿@```?D:E;@7:37/3,0)-&ȾA```umAH=K@LAE<91/))##0)```unAJ@NCQFSGKA:3.(%% ~```vnAJ?OCUHXLZMPE<4.'% &!>6ξA```xp@K@NCTHXL\O]PLA5.,&# +%;3zr?```?NBODRFVJZM]P`SLA4,+$" # 1,?8xq?```?LANCREUHXK[N^QXLMB3+*$!   ,'93G?ϾA```yq@LANCRFVJZM\O_RYLD;3+*$!  +&6/B;yr?ѾA```zq@L@L@ODSGWK[N_QaSOD:25--&$ !*&5/@9KB~v?```?MBLALAPETHXL\O`SZMPE915./)'!# +'5/@8JBRHѾA```MBK@K@LAQFUIYM]P`TZNE<804-0))$ !&#-)50?8IAPGVLҾA```xq@I?I>I>LAPDUIZN^QbUPE:27/3,/)+%#"'$-(2-82?9IAPGUKYNw?```?I?F<G<I>LAODSGXL]QXLF<915.2+.(*%%!# )%.)3.93>8C=IBPGTJWNXM~v?```?Ϳ@KAE<D;F<I?LAPDSGVJ[ONCE;804-0*,')#% $% *%/*4.93?8D=IAMEOGSJWMXNUKQFϾA```?801*,%& !*$5-Ͽ@yq@F=B9C:F<I?LBPESGVJSGLB:26/2,/)+&(#&!&!)%.)3.93>7C<H@MEPHQHSJVMXOVLRHND~```?pi@800)*$%  #e`@̿@?H>B9?7@7B9H>LBPESHVKKAC:815.2+/),'+%)$+%.)3-82=6B;G@LDQITKSJSJVLXNWNSJOEKAtm?```>56..'("#  )#ke@ο@un@B9=5=5>5?7A9G>LCQGPFJA;3805.3-2+0*.(.(0*3-71<6A:F?KCPHULWNVMULVMXNWNULQHLCH?D;```un@=44,.'(""  $6.zq@?D:=5;3;3<4>6?7@8E=KBLCD:<4:281705.3-1+2,5/92<6A:F>KCPGULYOZQXOVMWNXNWMULSJOGIAE<A8~```vn@?65-.''!"  & <3п@I?>5:2:2:2;3<5=6?7@8B:E<@8?7>5<4:381605081;4>7B:E>JBOGTKYP]S]S[RYPYOYOWNULSJQHMEG?B:>6=4~```}t@J?A8911*)#   ,%C9ҿ@?yq@C9:16.8091:2;4<5=6?7@8A8B9A9@8>7=6;493:4=6@9D<G?JCNFSKXO]T`V_U^T[RZQZPXNULSJQHOFKCE=?8;391<3~```|@VJNCF=>66/-(%! !3+NCJ?5-3+0*1+5.81;4<5>6@7A8C:D;C:A9?8>7=7?8B;F>IALDPGSKXO]SaWcXbX`V^T\R[QYOVMTJQHOFMEIAC;<5817/7/<3```?`TZORHKAC::32,*&# ("?6MA.',&*$.'1+4.<4@7C:D<E=E=D<B:@9A:D=H@KCNFRIULXO\SaWeZeZdYbX`V^T\RYPWMTKRIOGMDKCG@A9:3605/4-6/<3```@fY_SWMOFG??871/*($#   2+J@E;% &!/)80B9D;F=G?G?F>D=D=F>IBMEPHTKWNZQ^TaWe[g]g\f[dYbX`V^T[QWNULRJPGMEKCIAE>?8935/4.3-2+6.<3```?pbk^dX\QSJLCD<<64/.)*%&"#  *$=4[N1*:2D;E<G>I@IAIAG?H@KCOFRIULYO\S`VcYf\i_j_i_g]f[dYbWaW`V\RXOULQHNFLCIAG?C<=693603-1,1+0)4-=3```@ugobh\`UXNPGH@@::4602-.)+&'##   +%>5D;E<F>H@JAKCKCKCMEPHTKWN[Q^TaWeZh]k`malak`i^g]e[dYcXbXaW^TZQVMRJOFKCG@E=A:=6:3613.1+/*.).'3,=3```p{ltfl`dY\RTKMEH?B;>7:4603-/*+&(#$  '"C:E<F=H?IAKCMEMEOFRIVMYO\R_UbXe[i^laococncmak`i^g\f[eZdYcYbX_U\RXOTKPHLDIAE=A:>7;4724/1,.)-(,',&1+=4```ļupxjpch]`VYPUKOFJAF?C;?8:4713-.**&&""("5.E;F=H?IAKBMDNFQISKVNYP]S`VcYf\i_lapdqepeodnblak`i^h]g\f[e[eZcY`V]SZPVMRINFJBG?D<@9<582502-/*,'+&*%*$0)=4```Ǿzt}ntgm`eZ_U[QWMQHNEJBF>B;>793501--(($+%0)E;F=H>I@KCMEOGRJTLWNZQ]TaWdZg\j_mbpesgsgrgqeocnblak`j_i^h]g\g\f[dZaW^T[QXNTKPGLDIAF?C<?8:3603.0+-(*%($(#)#/(<3```~xsykqdi^dZaW]SYOULQHMEIAE=@9<572;3D;F=I?JAMDOFRITKWNYP[R^UbWeZh]k`ncqethuiuhthrfpdocmblal`k`j_j^i^h]g\f[cX`U]RYPVLRIOFLCIAE>B;>7924.1,-)*&'#&"%!'".'<3```€}w}ouhnbj^f[cY`U\RXNTKPGKDF>E<H>J@LCOFQHTKVMYP[R^T`VcYf[i^laocrfuiwkxkwjuisgrfpdocnbnbmalal`k_j_i^h]g\dYaV^S[QXNUKQHNFKCH@E>A:=6822-.*+'($%!$ #& ,%<2```Āzsylsfpdmaj_f[bX_UVLOFJ@LBOEQGTJVMYO[R]T`VbXdZg\j_mbpdsgvjylzmylxkwjuhsgqeqdpdococnbmbmal`k`j_j^h]eZbW_T\RZPWMTKQHNEKBG@D=@9<5711,,()%&"#!"$+$;2```ƀ~w}pylvjthpdmaYNJ@NDQGSIVLXN[Q]T`VbXdZg\i^kancqfthwkzn|o|o{nylxkvithsfrfreqepdpdocnbnbmalal`k_i^f[cXaV^T\QYOWMSJPGMEJBG?D<?8;4600++&'#$ ! #*#;1```?wh{s~q|oaUVKNDRHVKXN[P]S`UbXdZg\i^kancpesgviyl|o~q~q~p|ozmylwjviuhuhtgsfrfreqdpdpcocnbnbmal`j_g\eZbX`U]S[QXOVLSJPGMDIAF?C;>7:35//**%%!!!)"90```?zrAC97/MCwjg[MCQGVLZO]R_UbWdZg\i^kancperguiwkzm}prsrq}p{nylxkxkylxkxkwjviuhthsgsfreqdpdocnbmal`i^g[dYbW_U]RZPXNULRIOFLDIAF>B;=7934..))$# '!80```xoAA86.2+1*1*zqdLBQFUKZO_TbWdYg\i^k`nbperguiwkym|o~qtuttr~p|o{nzm{m{n|n{n{mzmylxkwjvjviuhtgsgrfqepdnbk_i]f[dYaV_T\RZPWMUKRIOFKCH@E>A:<6823-.(($"& 8/```LAA8915.4,2+2+>5LBQFTJYN^ScXf[i^k`nbpdrguiwkym|o~qsuvwvts~q}p|o|o}p}p~p~q~q~p}o|o{nzmzmylxkwjviuisgrepdnbk_h]eZcX`V^T[QYOVMTKQHNEKCH@D=@9;5712--('#!& 7/```?NBF<@8=4;3:1A8G>PFUJYN^SbWg\k`nbpdrfuiwkym|o~qsuwxxxvusr~q~qqrrrssssrr~q}p}p|o{nzmylwjuisgrepdnbk`h]eZbW`U]S[QXNVLSJQHMEJBG?C<?8:4601,,'&"!%6.```?~vANCI?G=F=G=H>KAPFUJZO^ScWh\l`odrfuhwjyl{n~prtvxzzzxvutssstttuuuvvuuttsrr~q|oznylwjuisgrepdnbk`h]eZbW_U]RZPXNULSIPGMDJBG?B;>7935/0++&%! %6.```?}uAODMCODSGPERGUJYN^RbWg[l_pdsguivjyl{n}prtvxz||{zxwuttuuuvvwwxxxyxxwvvutr~q|oznylwjuitgrepdmbk_h]eZbW_T\RYPWMTKRIOGLDIAF>A:=6824./**%$ $5-```?vARGRFSGRFVJZO`TdWh[l_qduhykzm{n{n}prsuwy{}~}|zxwvvvwwwxxyyzz{{{{zzyxvutr~q|o{nylwjuitgrfpdmbk_h]eZbW_T\RYOVMTJQHOFLCIAE=@9<5713-.))$$ $4,```?RFQFSGUI\PdXl^pbsevh{l~pqrrssuwy{}}|zxxwxxyyyzz{{||}}}~~}|{yxvutr~q|o{nylwkuitgrfpdmak_h]eZbW_U\RYOULSJPHNEKCH@D<?8;4602,-()$% #4,```?]P\PbUhZoawh|mpsuvvwwxxy{}}{zzz{{||}}}~~}|{yxvutr~q|o{nylwkvitgrfpdmaj_h]eZbW_U\RYOULRIPGMEKBG?C;>7:35/2,.)*%%!!#3+```?yitfwh{lrx{|}}}}}}}~~|{z{|}~}|{yxvutr~q}o{nylwkvitgrfpdmaj_h]eZbW_U\RYOULRIOGMDJBF>B:=6:3602-/*+&&"""2*```|~}||}~~|{yxvutr~q}o{nylxkvitgrfocmaj_h]eZbX_U\RYOULRIOGLDIAE>A:>7:4713.0*+''##"2*```~}}~~}{yxvutr~q}o{nylxkvithrfocmaj_g]eZbX_U\RYOULRIOGLDIAF>B;?8;5714.0+,'($# !1)оA```@@?@~~}{zxvutr~q}o{nylxkvithreocmaj_g]eZbX_U\RYOULRJPGMEJBF?C<?8<5825/1,-()$$ !0)~```@@~|zxwutr~q}o{nzmxkvithreoclaj_g\eZbX_U\RYOVMSJQHNEKCG@D<@9<693502,.)*%%!!!0(~```~}{ywutr~q}o{nzmxkvitgqeoclaj_g\dZbX_U\SYPWNTKQIOFLDHAD=A:=7:3602-/**&&"!!/(˾A```@}{zxvts~q}o{nzmxkvitgqeoclaj^g\eZbX`V]TZQXOULRJPGMDIAE>A:>7:4713./++''#" .'```@}|zxwusq}p{nzlxkvitgqeoclaj_h]e[cYaW^T[RYOVMSKQHMEJBF?B;?8;5724.0+,'(## 1)```@~|{ywutr~p|nzmxkvitgqeocmak_h]f\dZbX_U\SZPWNTKQINFKCG@C<@9<5825/1,-(($$ !5.```@~}{yxvtr~q|ozmxkvjthrfpdnbk`i^g\eZcX`V]TZQXOULRJOGLDHAD=A:=693502-.))%$! "~```@}|zxwusq}p{nylwkuhsgqenclaj_h]f[cYaW^T[RYPVMSJPHMEIBE>B;>7:4602-/**&%! & ~```@~|{ywutr~p|ozmykvitgqeocmak`i^f\dZbX_U\SZPWNTKQHNEJBF?C;?8;5713./*+&&"! )#~```@~}{zxvusq}p{nylwjuhrfpdnbl`i^g\e[cY`V]T[QXOULRIOFKCG@D<@9<5824/0+,''#"",%```@~}|{ywvtr~q|ozmxkvisgqeoclaj_h]f[cYaW^U\RYPVMRJOGLDHAE=A:=6935/1,,((##$1*```@~}{zxvusr~p{nylwjthrfodmbk`i^f\dZbX_U\SZPVNSKPHMEIBF>B;>7:4602--(($$ !& 5.```@}|{ywvtrq|ozmxkvisgpenbl`i_g]e[cY`V]TZQWNTKQINFJCG?C<?8;5713-.))%$ #'"~```~}|zxwusr}p{nylwjthrfoclaj_h]f[dZaW^U[RXOULRIOFKCH@D=@9<6824./**&%!!% )#~```@~|{yxvts~q|ozmxkuisgpdnbk`i^g\dZbX_V\SYPVMSJPGLDIAE=A:=6934/0++&&"#'",&~```@~}|zxwutr}p{nylvjthqeoclaj_g]e[cY`V]TZQWNTKPHMEJBF>B;>7:45/0+,''#$ (#/(```@~|{yxvts~q|ozmxkuirfpdmbk`h^f\dZaW^T[QXOTLQINFKCG?C<?8;5601,-((#%!)$2+```@~}|zywusq}p{nylvjtgqeoclai_g\eZbX_U\RXOUMRJOGLDH@D=@9<5612,-()$'#+%~```@~}{yxvtr~p|ozmwkuhrfpdmbk`h]e[cY`V]SYPVMSKPHMEIAE>A:<6712-.)*%)$,&̾A```@}|zywusq}p{nxlvisgqenclai_g]dZaW^TZQWNTLQINFJBF?B;=6723./*+&*%c^?```@~}{zxvtr~p|ozmwjuhrfpdmbk`h^e[bX_U[RXOULRJOGKCG@C<=7824./*+&-'~```Ȁ}|{ywusq}o{nxlvjsgqeoclaj_g\cY`V\SYPVMSJPHLDHAC<>8934/0+-'2+```@~}{zxvtr~p|ozmwkuisgpenck`h]eZaW]TZQWNTKQHMEIAD=?8935/1+/*ke?```@~|{ywusr}p{nylvjthrfodlai_f\bX_U[RXOULRINFJBE=?9:4601,4.˾A```@~|zxvusq}ozmxkuisgqenck`h]dZ`V]SYPVMSJOGKCE>@9;4603-;4```@}{yxvtr~p|oymwktirgodlai^e[bX^T[QWNTKPHKCF?@:;57171~```@}{ywusr}p{nxlvjshpembj_g\cY`V\RXOULQILDF?A:;582<5;A```@}{xvus~q|ozmwkuirfockah^eZaW]TZPVMRILDF?A:<6;4pj?```@@~|zxvtr~p{oymvjsgpdmbj_f\cX_U[RWNRILDF?A:=7?7```@~|zxusr}pznwkthqfnck`h]dY`V\SXORJLDG?A:@9̾A```@}{ywus~q|oylvjsgodlai^e[aW]TYOSJMEG?B<̾A```@}{ywtr}pznwkthpembj_f\bX^TYPSKMEG@;A```@}zxvt~q{oxluirfnck`g]cY_UZPTKMFξA```@~|zxus|pymvjsgodlah^dZ_UZQTKnh@```@@}{ywt~q{nwkthpembi_eZ`VXP /(̿@```@@}zxvs|pyluiqfncj`dZSK1, $ο@```~|ywt~qznwkshncg\f\ZPME82! ,&ѿ@```}{xus|pvjod}p~|tuh`VIA/*e`@```|yt|o?~?unbQH0*Ͽ@```A~~?~zvsg?AxnbQH+'ga@```svhi^g\eZ_V~w?@tf[A;!%!```Ž~xvik_f[\RLD̾A@~sgWN0,% ```zuimacXQHke?{maW<5'"```À|uik`ZP?8zng\H?,'ǽB```ŀxll`UL5.~{xkh\KC1+```ǀ{nk`NF.)<3teyrpdf[JB2,```@tocRJ.)& |ABrd|msfk`cYKCfb?```}vjYP1,!)#vA??~A^Qi\k_i^e[]SF?```Arf\C<!;3vA~~~]PODLAQG[P^S`VcYXOE=```@wkWM2- &!/(/(1*4-:3D=OFYO_U_URIͽB```@{pdRJ0+ &!-(81C;OG[RbX\S~```A}reVM>7($"*%3.?8NF]ScYbXy?```A?|og]TKG@>8<5>7D<NEYPdYi^i^ԽB```}~qsgj^g\f[i]mbqesg~```A~{xv~~````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````GLOB(h 0 *` dM /home/philipp/projekte/confclerk/src/icons/alarm.blendWM`FWMWinMan0 !` !` !` !`x wW $LMo= q=o=`p= q="""DATA !`/ *`screen C eW eWpA:A:AsNSN "` '`SRAnimation.001P*P*`'g*w`w dMDATAP* U*DATA U* V*P*DATA V*W* U*DATAW*X* V*DATAX*Y*W*DATAY*Z*X*DATAZ* [*Y*DATA [*`]*Z*DATA`]*^* [*<DATA^*`_*`]*<DATA`_*a*^*XDATAa*`c*`_*XDATA`c* d*a*XDATA d*d*`c*DATAd*f* d*DATAf* f*d*DATA f*P*f*<DATAP* f*<DATA`'``* U* V*DATA``*h*`' U*X*DATAh*`g*``* V*Y*DATA`g* s*h*X*Y*DATA s*'`g*P*Z*DATA'[* s*W*Z*DATA[*]*'Y* [*DATA]*Z*[*Z*`]*DATAZ*`\*]*W*^*DATA`\*c*Z*`]*^*DATAc* i*`\*P*`_*DATA i* Z*c* [*a*DATA Z*`' i*Z*a*DATA`'V* Z*`_*a*DATAV*`'`'`_*`c*DATA`''V*a*`c*DATA'`'`'X* d*DATA`''' [* d*DATA'`R*`'`c* d*DATA`R*`T*'`_*d*DATA`T*`V*`R*`c*f*DATA`V* X*`T*d*f*DATA X*`W*`V*`]* f*DATA`W*U* X* [* f*DATAU*S*`W*P*Y*DATAS*U*U*P*^*DATAU*'S*P* f*DATA'g*U*X*d*DATAg*' d*f*DATA`wwX* U* V*Y*GGFFDATAFFDA DADADA?? DATAFFmEmEpoo?? pDATA`wwwZ*`]*^*W*;< #` #` F`FDATA F`FCAb'&6XCAWCAWCA?? ";DATA`F FXC=GC!>!?@ ""!" JJDATA@ JJBUTTONS_PT_contextBUTTONS_PT_contextContext$DATA@J J JRENDER_PT_renderRENDER_PT_renderRender=DATA@ JJJRENDER_PT_layersRENDER_PT_layersLayersoDATA@J J JRENDER_PT_dimensionsRENDER_PT_dimensionsDimensionsDATA@ JJJRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing::DATA@J J JRENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blur"DATA@ JJJRENDER_PT_shadingRENDER_PT_shadingShading DATA@J J JRENDER_PT_performanceRENDER_PT_performancePerformanceDATA@ JJJRENDER_PT_post_processingRENDER_PT_post_processingPost ProcessingDATA@J J JRENDER_PT_stampRENDER_PT_stampStamp DATA@ JJJRENDER_PT_outputRENDER_PT_outputOutput( DATA@J JRENDER_PT_bakeRENDER_PT_bakeBake DATA #`DATA`wwwP*`_*a*Z*WX $` $`FFDATAFF DA'7DADADA?? DATAFF@~CHBpF}CHB=?HB|HHB= AH>W>DATA $`DATA`w`ww`]* f*P*^*=;FF F`FDATA F`FCAb'&6XCAWCAWCA?? ";DATA`F FCGCS?? =!DATAFT*DATA T* %`DATA %` dM dM dM dM ܳE e ܳ e ` dMDATA``w ww`c* d* [*a*YWj F FFFDATAF F@qDADAVDADA?? WWYrWDATA F`FFC@FCF++?@ ,sPDATA`FF FCfCww?@ xfss"DATAFF`F#C`#C`?@ sDATAFFsWP ADATAX A?ȧ? JLD>3;Q?Fwi?JF>#,TY!e?*=>o?E>Fwi?TY5;JF>!e?Q?#,+=>`DAoy@?>Ѣ0QQuZ? r[>?>#,>mi}?T*= lAoAc>ntU?@FR0ݹ,-3> O?8Clu·Ai>rB;B7@D>3;Q?Fwi?JF>#,TY!e?*=>o?>Ѣ0QQuZ? r[>?>#,>mi}?T*= lAoA [@ [@ [@?\>7?8˔oAoAH;? ! BVBq~BDATA F333?? AL> e B?=C DATA` ww`w`_*d*f*`c*Y &` &``F FDATA`FF@YDACACACA?? YrDATAFF`FHCpHC?? sDATAF FFsDATA FFC@zC Ao:o:|HPCGisDATA &`wDATA`w# dMDATA`w`w wd*X* d*f*  J J`FFDATA`FF^DACACACA?? DATAFF`F7CHC??DATAFF hDH hD|H@F #<HBJDATA  J$ dMDATA``ww f* [*Y*P*=3M3M`1M2MDATA`1M2MfDAC@AICACA?? JJ==DATA2M`1M= ADATAX A8 @d@AHMݕ/?V~'?3F:?>T8175e?4>Z& 4?ߕ/?7F:?81X~>75e?'?T3>ne@>N@?/?=I''? ??T?ļL@ l4}@~q11A 4AF>>֟ļG=->3xkBˇ֟&B|`eA(@ݕ/?V~'?3F:?>T8175e?4>Z& 4?/?=I''? ??T?ļL@ l4}@~q11A 4Afga@fga@fga@?H?N+Z# A;??ABcZBvBDATA3M333?? AL> e B? #<C SN '` *` "`SRCompositingg.001`U*i*`f* u* w w dM@.DATA`U* T*DATA T* Y*`U*DATA Y*Y* T*DATAY*`Z* Y*DATA`Z* Q*Y*DATA Q*^*`Z*DATA^*`* Q*``DATA`*_*^*`DATA_* b*`*`DATA b* \*_*DATA \*V* b*`DATAV*R* \*DATAR*i*V*DATAi*R*`DATA`f*`d* T* Y*DATA`d* e*`f* T*`Z*DATA e*j*`d* Q* Y*DATAj* k* e* Q*`Z*DATA k*`k*j*Y*`*DATA`k*`l* k*^*`*DATA`l*l*`k* Q*_*DATAl*`n*`l*`Z*_*DATA`n*n*l*^*_*DATAn* o*`n* Q*`*DATA o*`o*n*`Z* b*DATA`o*o* o* \*_*DATAo*o*`o* \* b*DATAo*p*o*V* b*DATAp*p*o*V* \*DATAp*q*p*R*`U*DATAq* r*p*R*i*DATA r*s*q*Y*i*DATAs*s* r*^*i*DATAs*t*s*R*V*DATAt* u*s* \*i*DATA u*t*`U* b*DATA` ww`Z* T* Y* Q*2@G@G 5M`6M@GGDATA 5M`6M@DADADADA??  2DATA`6M 5MmEmEpoo?? p` 2DATA`ww wi*^*`*Y*a_.` 1 (` (`7M8MGGDATA7M8MsDA'7CA-CACA?? ..a.1DATA8M7M@~CHB23JуCHB--E?HB|HHB= AH.Fa_.F1DATA (`?DATA`www^*_* Q*`*aa.`2 )` )` :M`;M@G GDATA :M`;MfCACA-CACA?? ..a.2DATA`;M :MC[C[.nRn?@ .ooRHaa.o 2JEDATA@J J`2BUTTONS_PT_contextBUTTONS_PT_contextContext$&DATA@ JJJ ѳRENDER_PT_renderRENDER_PT_renderRender= DATA@J J J`ѳRENDER_PT_layersRENDER_PT_layersLayerso DATA@ JJJѳRENDER_PT_dimensionsRENDER_PT_dimensionsDimensions DATA@J J JѳRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing::DATA@ JJJ ѳRENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blur"DATA@J J J`ѳRENDER_PT_shadingRENDER_PT_shadingShadingfDATA@ JJJѳRENDER_PT_performanceRENDER_PT_performancePerformance4DATA@J J JѳRENDER_PT_post_processingRENDER_PT_post_processingPost ProcessingDATA@ JJJ ѳRENDER_PT_stampRENDER_PT_stampStampzDATA@J J J`ѳRENDER_PT_outputRENDER_PT_outputOutputDATA@ J {JѳRENDER_PT_bakeRENDER_PT_bakeBakeDATA@ { E J`ҳWORLD_PT_context_worldWORLD_PT_context_world$DATA@ E E {ҳWORLD_PT_previewWORLD_PT_previewPreviewDATA@ E E EҳWORLD_PT_worldWORLD_PT_worldWorldjDATA@ EE E ҳWORLD_PT_ambient_occlusionWORLD_PT_ambient_occlusionAmbient OcclusionZ$DATA@E E E`ҳWORLD_PT_environment_lightingWORLD_PT_environment_lightingEnvironment Lighting$DATA@ EEEҳWORLD_PT_indirect_lightingWORLD_PT_indirect_lightingIndirect Lighting$DATA@EE EҳWORLD_PT_gatherWORLD_PT_gatherGather5DATA@EEE ҳWORLD_PT_mistWORLD_PT_mistMistDATA@EEE`ҳWORLD_PT_starsWORLD_PT_starsStars DATA@EEҳWORLD_PT_custom_propsWORLD_PT_custom_propsCustom Properties DATA )` KJ_DATA`w`wwR*V* \*i*_`1BMBMC6g>e&Kƿq@6@?6%yLn&%j#?A2ןxILA6g>(@? :?f?b(*H)?pgN?c_ -?uʰA~ (1OM)3Q2Q2Q2)?F?jH!oAˍ@h;\>7?8˔?Bpn@BDATABM333?? AL> e B?=C DATA``w ww b*`Z*_* \*_`]`2FMFM DM`EMGGDATA DM`EMBDADA_DADA?? ``_`2DATA`EM DM D D TD8A#;CO`BNNB??FFQ= @ `CO1_`C 2DATAFM @ dMpZ\?D)B 6DATA` w`w`U* b*V*R*1 M>AGM`JM`QGDATAGM IM@NDA׸7)DA(DA(DA?? 2DATA IM`JMGM 2DATA`JM IMBB!1A@rr`2DATA M>A ZW dMdA>d>ddd?DATA FO@PDADADADA?? ` 2DATAO O FCt_Ct?@  2 { {DATA O`OO DHB 7DHB1DDBDDB?? 222 2DATA`O OVC@fDc?? 2DATA<>A M F`O .pN NJDATA .Save As Image/home/philipp/projekte/confclerk/src/icons/alarm-off.png 0SN *` -` '`SRDefault`M M`MMw w dM=J@.DATA`MMDATAMM`MDATAM MMDATA M`MMDATA`MM MDATAMM`MDATAM MM DATA M`MM DATA`MM M DATAMM`MDATAM MM8DATA MM 8DATA`MMMMDATAMM`MM`MDATAM MMMMDATA M`MM`MMDATA`MM M`MMDATAMM`M MMDATAM MM`M MDATA M`MMM MDATA`MM MM`MDATAMM`M M`MDATAM MMMMDATA M`MM MMDATA`MM M`MMDATAMM`M`MMDATAM MM`MMDATA M`MM M MDATA`MM MM MDATAM`MM MDATA`ww`MMMM%2GGKMLM`PPDATAKMLMDADADADA?? > 2 ܳ ܳNiDDATALMKMmED0A~ o} ??  ~  ?` 2@:AFDATA`wwwM`MM M!n`2 +` +` NM`OM@PPDATA NM`OMCACAmCACA?? nn!n@2 Fܳ Fܳ`yFwDATA`OM NMCC8]nJ\?@ n]C !nA 2 ܳ ܳJ NDATA@J J JRENDER_PT_layersRENDER_PT_layersLayerso?DATA@ JJJRENDER_PT_dimensionsRENDER_PT_dimensionsDimensions@DATA@J J JRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing::ADATA@ JJJRENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blur"BDATA@J J JRENDER_PT_shadingRENDER_PT_shadingShading CDATA@ JJJRENDER_PT_performanceRENDER_PT_performancePerformanceDDATA@J J JRENDER_PT_post_processingRENDER_PT_post_processingPost ProcessingEDATA@ JJJRENDER_PT_stampRENDER_PT_stampStampFDATA@J J JRENDER_PT_outputRENDER_PT_outputOutput$GDATA@ JJJRENDER_PT_bakeRENDER_PT_bakeBake HDATA@J J JSCENE_PT_sceneSCENE_PT_sceneScenenV7DATA@ JJJSCENE_PT_unitSCENE_PT_unitUnits:S9DATA@J J JSCENE_PT_keying_setsSCENE_PT_keying_setsKeying SetsE:DATA@ JJJSCENE_PT_physicsSCENE_PT_physicsGravity$;DATA@J J JSCENE_PT_simplifySCENE_PT_simplifySimplify9P<DATA@ JJJSCENE_PT_custom_propsSCENE_PT_custom_propsCustom Properties$=DATA@J J JmoDATA_PT_modifiersDATA_PT_modifiersModifiers$6DATA@ JJJSCENE_PT_audioSCENE_PT_audioAudio8DATA@J J JZѳOBJECT_PT_context_objectOBJECT_PT_context_object$+DATA@ JJJ \ѳOBJECT_PT_transformOBJECT_PT_transformTransform'y,DATA@J J J`]ѳOBJECT_PT_delta_transformOBJECT_PT_delta_transformDelta Transform`-DATA@ JJJ^ѳOBJECT_PT_transform_locksOBJECT_PT_transform_locksTransform Locks7`.DATA@J J J_ѳOBJECT_PT_relationsOBJECT_PT_relationsRelationsb/DATA@ JJJ aѳOBJECT_PT_groupsOBJECT_PT_groupsGroups$0DATA@JM J`bѳOBJECT_PT_displayOBJECT_PT_displayDisplay1DATA@M MJcѳOBJECT_PT_duplicationOBJECT_PT_duplicationDuplication$2DATA@ MMMdѳOBJECT_PT_relations_extrasOBJECT_PT_relations_extrasRelations Extras2P3DATA@M M M fѳOBJECT_PT_motion_pathsOBJECT_PT_motion_pathsMotion Pathsw4DATA@ MMM`gѳOBJECT_PT_custom_propsOBJECT_PT_custom_propsCustom Properties_5DATA@M M M`XѳOBJECT_PT_constraintsOBJECT_PT_constraintsObject Constraints$*DATA@ MMM`]oDATA_PT_context_meshDATA_PT_context_mesh$"DATA@M M M^oDATA_PT_normalsDATA_PT_normalsNormalsf:#DATA@ MMM_oDATA_PT_texture_spaceDATA_PT_texture_spaceTexture SpaceN$DATA@M M M aoDATA_PT_vertex_groupsDATA_PT_vertex_groupsVertex GroupsL%DATA@ MMM`boDATA_PT_shape_keysDATA_PT_shape_keysShape KeysL&DATA@M M McoDATA_PT_uv_textureDATA_PT_uv_textureUV Maps)E'DATA@ MMMdoDATA_PT_vertex_colorsDATA_PT_vertex_colorsVertex ColorsE(DATA@M M M foDATA_PT_custom_props_meshDATA_PT_custom_props_meshCustom Properties)DATA@ MMM`:ѳMATERIAL_PT_context_materialMATERIAL_PT_context_material^\~DATA@M M M`NoDATA_PT_context_lampDATA_PT_context_lamp\$DATA@ MMMOoDATA_PT_previewDATA_PT_previewPreview\DATA@M M MPoDATA_PT_lampDATA_PT_lampLampU\DATA@ MMM`SoDATA_PT_shadowDATA_PT_shadowShadow\DATA@M M M`XoDATA_PT_custom_props_lampDATA_PT_custom_props_lampCustom Propertiest\DATA@ MMMWORLD_PT_context_worldWORLD_PT_context_world$DATA@M M MWORLD_PT_previewWORLD_PT_previewPreviewDATA@ MMMWORLD_PT_worldWORLD_PT_worldWorldj DATA@M M MWORLD_PT_ambient_occlusionWORLD_PT_ambient_occlusionAmbient OcclusionZ$ DATA@ MMMWORLD_PT_environment_lightingWORLD_PT_environment_lightingEnvironment Lighting$ DATA@M M MWORLD_PT_indirect_lightingWORLD_PT_indirect_lightingIndirect Lighting$ DATA@ MMMWORLD_PT_gatherWORLD_PT_gatherGather5 DATA@M M MWORLD_PT_mistWORLD_PT_mistMistDATA@ MMMWORLD_PT_starsWORLD_PT_starsStarsDATA@M M MWORLD_PT_custom_propsWORLD_PT_custom_propsCustom PropertiesDATA@ MMM;ѳMATERIAL_PT_previewMATERIAL_PT_previewPreview\DATA@M M M >ѳMATERIAL_PT_diffuseMATERIAL_PT_diffuseDiffuseg\?DATA@ MMM`?ѳMATERIAL_PT_specularMATERIAL_PT_specularSpecular\SDATA@M M M@ѳMATERIAL_PT_shadingMATERIAL_PT_shadingShading\PDATA@ MMMAѳMATERIAL_PT_transpMATERIAL_PT_transpTransparency)\SDATA@M M M CѳMATERIAL_PT_mirrorMATERIAL_PT_mirrorMirror\DATA@ MMM`DѳMATERIAL_PT_sssMATERIAL_PT_sssSubsurface Scattering\DATA@M M MJѳMATERIAL_PT_strandMATERIAL_PT_strandStrand\DATA@ MMMKѳMATERIAL_PT_optionsMATERIAL_PT_optionsOptions\DATA@M M M MѳMATERIAL_PT_shadowMATERIAL_PT_shadowShadow\ DATA@ MMM WѳMATERIAL_PT_custom_propsMATERIAL_PT_custom_propsCustom Properties\!DATA@M M M 9oDATA_PT_context_cameraDATA_PT_context_camera\$DATA@ MNM`:oDATA_PT_lensDATA_PT_lensLens \DATA@N N M;oDATA_PT_cameraDATA_PT_cameraCamera\VDATA@ NNNoDATA_PT_camera_displayDATA_PT_camera_displayDisplay\|DATA@ NN`?oDATA_PT_custom_props_cameraDATA_PT_custom_props_cameraCustom Properties\DATA +`vvDATA`w`ww`MM MM7 8`1VM ,`PMUM P@PDATAPMQMlDADADADA??   B 1 Bܳ Bܳ@NNDATAQM SMPM71DATA SM`TMQM"`1DATA`TMUM SM71DATAUM`TM7 C 1eD" ADATAX A͟>%IxIwѷ$DE^y?cy?b?¬g>B6g>f%$¿p@|@X0@.& Dm%- ?2AA`ןxI7R6g>)@DjihW>o>pG46gcyHB?hf?I?ISLXWN?W=p= f8E_y?cy?3> 2@ +@I@n\1bb@p?_:?4HB?*@?F?jH!͘ A6@Klj;??kBB3ADATAVM ,`333?L> e B? #<zD DATA XM`YM`DADA`DA`DA?? DATA`YM XM@~CHBXg(CHB?HB|HHB= AH3DATA ,`VM XM`YM?DATA``w ww`M MMM!n1 ]M ]MZM[MP PDATAZM[MCAĎA7CAmCACA?? nn!nD`1 rܳ rܳxF`NDATA[MZMCC ]n\\?? n]!nE1 Rܳ RܳpF kDDATA ]M?A?AMse SculptDATA M d BDATA| Bd  dM dM dM dM ܳE e ܳ e ` dM dM dM dM dM dM dM dM dM dM dM  dM  dM  dM  dM  dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM  dM! dM" dM# dM$ dM% dM& dM' dM( dM) dM* dM+ dM, dM- dM. dM/ dM0 dM dM dM dM dM dM dM dM dM dM dM  dM  dM  dM  dM  dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM dM  dM! dM" dM# dM$ dM% dM& dM' dM( dM t_ {_ _ _ t t t t &t -t 4t ;t Bt It Pt Wt ^t et lt st zt t t t t t t t t t t_ t_ t_ t_ t_ t_ t_ t_ t_  t_  t_  t_  t_  t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_ t_  t_! t_" t_# t_$ t_% t_& t_' t_( t_) t_* t_+ t_, t_- t_. t_/ t_0 t_1 t_2 t_3 t_4 t_5 t_6 t_7 t_8 t_9 t_: t_; t_< t_= t_> t_? t_@ t_A t_B t_C t_D t_E t_ ` ܳ e e "` '` *` -` ӳ ӳ ӳE`F ܳ {_ {_ {_ {_ {_ {_ {_ {_ {_  {_  {_  {_  {_  {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_  {_! {_" {_# {_$ {_% {_& {_' {_( {_) {_* {_+ {_, {_- {_. {_/ {_0 {_1 {_2 {_3 {_4 {_5 {_6 {_7 {_8 {_9 {_: {_; {_< {_= {_> {_? {_@ {_A {_B {_C {_D {_E {_ _ _ _ _ _ _ _ _ _  _  _  _  _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _! _" _# _$ _% _& _' _( _) _* _+ _, _- _. _/ _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _: _; _< _= _> _? _@ _A _B _C _D _E _ _ _ _ _ _ _ _ _ _  _  _  _  _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _! _" _# _$ _% _& _' _( _) _* _+ _, _- _. _/ _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _: _; _< _= _> _? _@ _A _B _C _D _E _ t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t &t &t &t &t &t &t &t &t &t  &t  &t  &t  &t  &t &t &t &t &t &t &t &t &t &t &t &t &t &t &t &t &t &t &t  &t! &t" &t# &t$ &t% &t& &t' &t( &t) &t* &t+ &t, &t- &t. &t/ &t0 &t1 &t2 &t3 &t4 &t5 &t6 &t7 &t8 &t9 &t: &t; &t< &t= &t> &t? &t@ &tA &tB &tC &tD &tE &t -t -t -t -t -t -t -t -t -t  -t  -t  -t  -t  -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t  -t! -t" -t# -t$ -t% -t& -t' -t( -t) -t* -t+ -t, -t- -t. -t/ -t0 -t1 -t2 -t3 -t4 -t5 -t6 -t7 -t8 -t9 -t: -t; -t< -t= -t> -t? -t@ -tA -tB -tC -tD -tE -t 4t 4t 4t 4t 4t 4t 4t 4t 4t  4t  4t  4t  4t  4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t 4t  4t! 4t" 4t# 4t$ 4t% 4t& 4t' 4t( 4t) 4t* 4t+ 4t, 4t- 4t. 4t/ 4t0 4t1 4t2 4t3 4t4 4t5 4t6 4t7 4t8 4t9 4t: 4t; 4t< 4t= 4t> 4t? 4t@ 4tA 4tB 4tC 4tD 4tE 4t ;t ;t ;t ;t ;t ;t ;t ;t ;t  ;t  ;t  ;t  ;t  ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t ;t  ;t! ;t" ;t# ;t$ ;t% ;t& ;t' ;t( ;t) ;t* ;t+ ;t, ;t- ;t. ;t/ ;t0 ;t1 ;t2 ;t3 ;t4 ;t5 ;t6 ;t7 ;t8 ;t9 ;t: ;t; ;t< ;t= ;t> ;t? ;t@ ;tA ;tB ;tC ;tD ;tE ;t Bt Bt Bt Bt Bt Bt Bt Bt Bt  Bt  Bt  Bt  Bt  Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt Bt  Bt! Bt" Bt# Bt$ Bt% Bt& Bt' Bt( Bt) Bt* Bt+ Bt, Bt- Bt. Bt/ Bt0 Bt1 Bt2 Bt3 Bt4 Bt5 Bt6 Bt7 Bt8 Bt9 Bt: Bt; Bt< Bt= Bt> Bt? Bt@ BtA BtB BtC BtD BtE Bt It It It It It It It It It  It  It  It  It  It It It It It It It It It It It It It It It It It It It  It! It" It# It$ It% It& It' It( It) It* It+ It, It- It. It/ It0 It1 It2 It3 It4 It5 It6 It7 It8 It9 It: It; It< It= It> It? It@ ItA ItB ItC ItD ItE It Pt Pt Pt Pt Pt Pt Pt Pt Pt  Pt  Pt  Pt  Pt  Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt Pt  Pt! Pt" Pt# Pt$ Pt% Pt& Pt' Pt( Pt) Pt* Pt+ Pt, Pt- Pt. Pt/ Pt0 Pt1 Pt2 Pt3 Pt4 Pt5 Pt6 Pt7 Pt8 Pt9 Pt: Pt; Pt< Pt= Pt> Pt? Pt@ PtA PtB PtC PtD PtE Pt Wt Wt Wt Wt Wt Wt Wt Wt Wt  Wt  Wt  Wt  Wt  Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt Wt  Wt! Wt" Wt# Wt$ Wt% Wt& Wt' Wt( Wt) Wt* Wt+ Wt, Wt- Wt. Wt/ Wt0 Wt1 Wt2 Wt3 Wt4 Wt5 Wt6 Wt7 Wt8 Wt9 Wt: Wt; Wt< Wt= Wt> Wt? Wt@ WtA WtB WtC WtD WtE Wt ^t ^t ^t ^t ^t ^t ^t ^t ^t  ^t  ^t  ^t  ^t  ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t ^t  ^t! ^t" ^t# ^t$ ^t% ^t& ^t' ^t( ^t) ^t* ^t+ ^t, ^t- ^t. ^t/ ^t0 ^t1 ^t2 ^t3 ^t4 ^t5 ^t6 ^t7 ^t8 ^t9 ^t: ^t; ^t< ^t= ^t> ^t? ^t@ ^tA ^tB ^tC ^tD ^tE ^t et et et et et et et et et  et  et  et  et  et et et et et et et et et et et et et et et et et et et  et! et" et# et$ et% et& et' et( et) et* et+ et, et- et. et/ et0 et1 et2 et3 et4 et5 et6 et7 et8 et9 et: et; et< et= et> et? et@ etA etB etC etD etE et lt lt lt lt lt lt lt lt lt  lt  lt  lt  lt  lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt  lt! lt" lt# lt$ lt% lt& lt' lt( lt) lt* lt+ lt, lt- lt. lt/ lt0 lt1 lt2 lt3 lt4 lt5 lt6 lt7 lt8 lt9 lt: lt; lt< lt= lt> lt? lt@ ltA ltB ltC ltD ltE lt st st st st st st st st st  st  st  st  st  st st st st st st st st st st st st st st st st st st st  st! st" st# st$ st% st& st' st( st) st* st+ st, st- st. st/ st0 st1 st2 st3 st4 st5 st6 st7 st8 st9 st: st; st< st= st> st? st@ stA stB stC stD stE st zt zt zt zt zt zt zt zt zt  zt  zt  zt  zt  zt zt zt zt zt zt zt zt zt zt zt zt zt zt zt zt zt zt zt  zt! zt" zt# zt$ zt% zt& zt' zt( zt) zt* zt+ zt, zt- zt. zt/ zt0 zt1 zt2 zt3 zt4 zt5 zt6 zt7 zt8 zt9 zt: zt; zt< zt= zt> zt? zt@ ztA ztB ztC ztD ztE zt t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t t t t t t t t t t  t  t  t  t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? t@ tA tB tC tD tE t ` ` ` ` ` ` ` ` `  `  `  `  `  ` ` ` ` ` ` ` ` ` ` ` ` ` ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ  ܳ  ܳ  ܳ  ܳ  ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ e e e e e e e e e  e  e  e  e  e e e e e e e e e e e e e e e e e e e  e! e" e# e$ e% e& e' e( e) e* e+ e, e- e. e/ e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e: e; e< e= e> e? e@ eA eB eC eD eE eF eG eH eI eJ eK eL eM eN eO eP eQ eR eS eT eU eV eW eX eY eZ e[ e\ e] e^ e_ e` e e e e e e e e e e  e  e  e  e  e e e e e e e e e e e e e e e e e e e  e! e" e# e$ e% e& e' e( e) e* e+ e, e- e. e/ e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e: e; e< e= e> e? e@ eA eB eC eD eE eF eG eH eI eJ eK eL eM eN eO eP eQ eR eS eT eU eV eW eX eY eZ e[ e\ e] e^ e_ e` e "` "` "` "` "` "` "` "` "`  "` '` '` '` '` '` '` '` '` '`  '` *` *` *` *` *` *` *` *` *`  *` -` -` -` -` -` -` -` -` -`  -` ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ  ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ  ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ ӳ  ӳEEEEEEEEE E E E E EEEEEE`F`F`F`F`F`F`F`F`F `F `F ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ  ܳ  ܳ  ܳ  ܳ  ܳ ܳ ܳ ܳ ܳ ܳ ܳ ܳ e 2f  e  e  e e e e e e ye e  ye  ye e Af @B @B @B B B B e ܳ >ܳ N N`F`GADATA@ N VIEW3D_PT_last_operatorVIEW3D_PT_last_operatorTranslatetionts All'DATA bM`cM`MC#C ģ?@ lSI1 Dܳ ܳ N NtFFDATA@ N N` VIEW3D_PT_objectVIEW3D_PT_objectTransform|l&DATA@ NN N VIEW3D_PT_gpencilVIEW3D_PT_gpencilGrease PencilPDATA@N N NҳVIEW3D_PT_view3d_propertiesVIEW3D_PT_view3d_propertiesViewDATA@ NNN ҳVIEW3D_PT_view3d_cursorVIEW3D_PT_view3d_cursor3D Cursor`DATA@N N N`ҳVIEW3D_PT_view3d_nameVIEW3D_PT_view3d_nameItem^$DATA@ NNNҳVIEW3D_PT_view3d_displayVIEW3D_PT_view3d_displayDisplay?DATA@N N NҳVIEW3D_PT_view3d_motion_trackingVIEW3D_PT_view3d_motion_trackingMotion Trackings|DATA@ NNN ҳVIEW3D_PT_view3d_meshdisplayVIEW3D_PT_view3d_meshdisplayMesh DisplayhDATA@N N NҳVIEW3D_PT_background_imageVIEW3D_PT_background_imageBackground Images$DATA@ NNҳVIEW3D_PT_transform_orientationsVIEW3D_PT_transform_orientationsTransform Orientations$ DATA`cM bMkSJ 1 NN ADATAX A$)#>)_j>o??3?33G׿Jq??3?3BG??$)#>2n;(_j>ꉖ$)#2ž/?*@ 4ϋ@CBG??DjooCj>o-5Gj4IB?&?&?Fi(Zꉖ.UO=/5ʳDx3n;\:=>/?v?v?v?HB?*@?5?5*@?>[<3B3G׿5?5=BQ6BDATAdM O333?? AL> e B?=zD4(1  XDATAeM gM@NDADADADA??  9R 2DATA gM`hMeMS 2DATA`hMiM gMS2DATAiM`hMBBA@@+A S `2DATA OvDdMeMiM ZW dMdA>d>ddd?DATAjM lM@PDADADADA?? ` 2DATA lM`mMjMCt_Ct?@  2 n nDATA`mMnM lMDHBy8DHB1DDBDDB?? 222 2DATAnM`mMVC@fDc?? 2DATA<vD OjMnM .N nWDATA .Save As Imageile/home/philipp/projekte/confclerk/src/icons/alarm-on.png 0SN -` ӳ *`SRGame Logic.001 M`MM@Oww dMDATA M`MDATA`MM MDATAMM`M~DATAM MM~DATA M`MMDATA`MM M~DATAMM`MDATAM MM DATA M`MM DATA`MM M~DATAMM`M@DATAM MM@DATA M`MMDDATA`M MDDATAMM`MMDATAM MM`M MDATA M`MMM`MDATA`MM M M`MDATAMM`M MMDATAM MMMMDATA M`MMM MDATA`MM MM MDATAMM`M MMDATAM MM M MDATA M`MM`M`MDATA`MM MM`MDATAMM`MM`MDATAM MMMMDATA M`MM`MMDATA`MM M`MMDATAMM`MM MDATAM`@OMM MDATA`@O@OM M`MDATA@O@O`@OM`MDATA@O@O M`MDATA`ww M`MM`M~`G`GoM qMDATAoM qM DADA~DADA?? ~DATA qMoMmED@poo?? pDATA`w`ww MM`MM!~^ .` .``rMsMDATA`rMsMCACA]CACA?? ^^!~r^DATAsM`rMC=CM^qNLq?@ ^rMr!~q^rNNDATA@N NBUTTONS_PT_contextBUTTONS_PT_contextContextL$DATA@ NNNRENDER_PT_renderRENDER_PT_renderRenderL=DATA@NN NRENDER_PT_layersRENDER_PT_layersLayersoLDATA@N NNRENDER_PT_dimensionsRENDER_PT_dimensionsDimensionsLDATA@ NNNRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing:L:DATA@N N NRENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blur"LDATA@ NNNRENDER_PT_shadingRENDER_PT_shadingShading LDATA@N N NRENDER_PT_performanceRENDER_PT_performancePerformanceLDATA@ NNNRENDER_PT_post_processingRENDER_PT_post_processingPost ProcessingLDATA@N N NRENDER_PT_stampRENDER_PT_stampStampL DATA@ NNNRENDER_PT_outputRENDER_PT_outputOutput(L DATA@N NRENDER_PT_bakeRENDER_PT_bakeBakeL DATA .`DATA``w ww MMM M GGtM`wMDATAtM vMJCADADADA??   DATA vM`wMtM\CKCqq?@ rrr N NDATA@ NLOGIC_PT_propertiesLOGIC_PT_propertiesProperties$DATA`wM vMDpCPDƶ¸C3Dq22q??FF?H? Dr3`DrDATA4GDATA` ww`wMM`M`MA~ >] H HxMyMDATAxMyMCADA=@DA@DA?? >>A~>DATAyMxMCCDVD=B #<zD >C>CA~>CDATA H DATA`ww w M`MMME?]RORO {M`QODATA {M`|M@qDA~DA~DA~DA?? E?DATA`|M}M {MC@FCF++?@ ,EECDATA}M~M`|MCfCww?@ xfE?"DATA~M`QO}M4Cm#Cmã?@ ??DATA`QO~ME?C ADATAX A#=K(=o?????????#=K(=o?5ApykA?????#=K(=o?t@t@t@??5AoA9P=\>7?8˔?BBDATARO333?? AL> e B?=zD DATA`wwM M`M MCD]`VO`VOSO UODATASO UOCACACCACA?? DDCDDATA UOSOCC@ 3DB22B?? DC31CDCDATA`VO AODATA AO /`DATA /` dM dM dM dM ܳE e ܳ e ` dMSN ӳ ӳ -`SRScriptingg.001`AODODO JO`w w dMDATA`AOAODATAAOAO`AODATAAO BOAO~DATA BO`BOAO~DATA`BOBO BODATABOBO`BO~DATABO COBODATA CO`COBODATA`COCO COhDATACOCO`COhDATACO DOCOhDATA DO`DOCODATA`DODO DO~DATADO`DODATADO EOAOAODATA EO`EODOAO`BODATA`EOEO EOAOBODATAEOEO`EO`BOBODATAEO FOEOBOBODATA FO`FOEO BO CODATA`FOFO FO`AO`CODATAFOFO`FO`BO`CODATAFO GOFOBOCODATA GO`GOFO COCODATA`GOGO GO`COCODATAGOGO`GOCOCODATAGO HOGO CO DODATA HO`HOGOBO DODATA`HOHO HOBO`DODATAHOHO`HO BO`DODATAHO IOHO DO`DODATA IO`IOHO`BODODATA`IOIO IOBODODATAIOIO`IOCODODATAIO JOIO`COCODATA JOIO`AO CODATA``w w`BOAOAOBO~]GGWOXODATAWOXO DADA~DADA?? ~DATAXOWODBDBnBomB?? CnC~CDATA` ww`w CO DO`DO BO~ ӳ ӳ ZO`[ODATA ZO`[OCACACACA?? ~DATA`[O ZOC=C4}~|?@ }~N NDATA@N NBUTTONS_PT_contextBUTTONS_PT_contextContext|$DATA@ NNNRENDER_PT_renderRENDER_PT_renderRender|=DATA@N N NRENDER_PT_layersRENDER_PT_layersLayerso|DATA@ NNNRENDER_PT_dimensionsRENDER_PT_dimensionsDimensions|DATA@N N NRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing:|:DATA@ NNNRENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blur"|DATA@N N NRENDER_PT_shadingRENDER_PT_shadingShading |DATA@ NNNRENDER_PT_performanceRENDER_PT_performancePerformance|DATA@N N NRENDER_PT_post_processingRENDER_PT_post_processingPost Processing|DATA@ NNNRENDER_PT_stampRENDER_PT_stampStamp| DATA@N N NRENDER_PT_outputRENDER_PT_outputOutput(| DATA@ NNRENDER_PT_bakeRENDER_PT_bakeBake| DATA ӳDATA`ww wCODOBOCOi?bObO\OaODATA\O]O@qDA=DA=DA=DA?? iDATA]O _O\OC@FCF++?@ ,%DATA _O``O]OCfCww?@ xf"DATA``OaO _O#C#Cyy?@ zhDATAaO``O% ,ADATAX ,A?J?PףD>3;Q?Fwi?JF>#,TY!e?*=>o?E>Fwi?TY5;JF>!e?Q?#,+=>`DAoy@?>ޠQQuZ?> .>#,>m6uU?F +!>?`5hąC% ÈG6DWѦCGBD>3;Q?Fwi?JF>#,TY!e?*=>o?>ޠQQuZ?> .>#,>m7?8˔oAoAk;?! BVBt~BDATAbO333?? AL> e B? #<C DATA`w`ww`AO`COCO COgh E E dO`eODATA dO`eOCADADADA?? DATA`eO dOD3CDCMM?? NNgNDATAXfnDATAfnDATAh EXX>>> pythonDATA``w ww DOBOBO`DO~ iO iOfOgODATAfOgOCACACACA?? ~DATAgOfOCC}||?? }~DATA iO`JODATA `JO ӳDATA ӳ dM dM dM dM ܳE e ܳ e ` dMDATA` w`w`CO`BODOCOi ? H H`jOkODATA`jOkOCA>DA=DA=DA?? iDATAkO`jODDD)dD.>CC$ #<zD %%%DATA H =z||SN ӳ ӳ ӳSRUV EditingJO`LOLO OOw`x dMDATAJOJODATAJO KOJODATA KO`KOJO~DATA`KOKO KO~DATAKOKO`KODATAKO LOKO~DATA LO`LOKODATA`LO LODATALOLOJO KODATALO MOLOJOKODATA MO`MOLO KOKODATA`MOMO MOKOKODATAMOMO`MOKO LODATAMO NOMOJO`LODATA NO`NOMOJOKODATA`NONO NO LO`LODATANONO`NOKO LODATANO OONO`KO`LODATA OONO`KOKODATA`wxKOJO KOKO~ G GlO nODATAlO nO DADA~DADA?? ~DATA nOlOmEmEpoo?? pDATA`x`xwJOKO LO`LO O O`oOqODATA`oOpOCArDAqDAqDA?? DATApOqO`oO[CsJCs?@ NNDATA@NIMAGE_PT_gpencilIMAGE_PT_gpencilGrease PencilPDATAqOpOCC33+?33@DATA OdA>d>ddd?DATA``xx`LO LOKO`KO~`yO`yO sO xODATA sO`tO@qDAmDA@mDA@mDA?? ~DATA`tOuO sO CVCVWW?@ XXhX N NDATA@ NVIEW3D_PT_tools_objectmodeVIEW3D_PT_tools_objectmodeObject ToolsDATAuOvO`tO!CfC[Zww?@ xxhx"NNDATA@NVIEW3D_PT_last_operatorVIEW3D_PT_last_operatorOperatorDATAvO xOuO#C~#C~  ?@  ~~DATA xOvOi~ (ADATAX (AH?? JLD>3;Q?Fwi?JF>#,TY!e?*=>_?E>Fwi?TY4;JF>!e?Q?#,+=>6@_?? ?0QQ?X>?>#,>ՒΜz?T*=dbR@_@y\>,? (K5>}Q?sMd@JWA.Xj@-@D>3;Q?Fwi?JF>#,TY!e?*=>_? ?0QQ?X>?>#,>ՒΜz?T*=dbR@_@>>>?\>7?8˔_@_@r:?! BUBt~BDATA`yO333?? AL> e B?=C SN ӳ ӳSRVideo Editing`OO`OOO xx dMDATA`OOOODATAOOOO`OODATAOO`OOODATA`OOOODATAOO`ODATAO OODATA O`OO\DATA`OO ODDATAOO`O0DATAO OO\DATA O`OO0\DATA`O ODDATAOOOOOODATAO OOOOODATA O`OOOOODATA`OO OOODATAOO`OO ODATAO OO`OO`ODATA O`OOOODATA`OO O`OODATAOO`OO ODATAO OOO ODATA O`OO O`ODATA`OO O`O`ODATAOO`O`O`ODATAO OO`OO`ODATA O`OOOODATA`OO O O ODATAOO`OOODATAOO OODATA` xxOOOOOOGGzO{ODATAzO{ODA DADADA?? DATA{OzOmEmEpoo?? pDATA`xx x`OO`O`O`OCD ӳ ӳ }O`~ODATA }O`~O DA DADADA?? DATA`~O }O@~CHBpF}CHB)?HB|HHB= AH*C*DATA ӳDATA`x`xx`OO O`OE[ ӳ ӳO`ODATAOODA DADADA?? E^DATAO OO\C}KC}?@ _[DATA O`OOppDDppDD;F;F'7PG[[DATA`O OzCAzCA A?|HB #<Bi_[DATA ӳ@DATA``xxxOOO O/]0f ӳ ӳO`ODATAOO@YDAA7 DA/ DA DA?? 00/]v0DATAO OOHCpHCKK?? L:wLDATA O`OO//wDATA`O OC@zC AKVVKo:o:|HPCGiWL/wWLDATA ӳ xDATA` x# dMDATA`x`x OOO O1]f ӳ ӳO`ODATAOOCA0DA/DA/DA?? 1]vDATAO OOwDATA O`OOCC!!DDK;F;F'7PGLL1wLDATA`O OzCAzCAKK A?|HB #<BiLDATA ӳ@SC@ dMSCScenetageain x e ܳtN>E9E[̾?HB?*@HB?*@HB?*@ 6 ~ܳ v ZZD?dd??< d ZP! ????vv??????/tmp/ L?L?L??>??_??BLENDER_RENDERD?fC??xX`bF X< ?=>L>I?fff?@?@Aff?AA@?A <@?DATAl xDATAtN@9E. ;bDATA@9E ;EtN eDATA ;EE;EZ` yeDATA@>E>E=E. eDATA>E>E@>E eDATA>E>E.X eDATA ~ܳ q^pq^X?L?B ?o:= ?? tP2 HB2 B2 HB2 HB2 HB2 HB2 HB>? #<===ff??AHz?=???C#y??#y??DATA$ q^ &tDATA$pq^ &tDATAXX tdd|AJA6V{?DATAhvRenderLayerrDATA 6LNTCompositing Nodetree ?)C)q^s^DATA  ?)J@)ERender Layers C P dM=X9CCB(B=Xz+C9CC=NzrgC9C`` DATA @)JC) ?):)Composited P P dMwDOoCC9C(BwD5Dh1BOoCwD3DCOC  3 DATA C)J@)LDilate/Erode  P P P PZ9Cz9CCB(BZ9ChCBz9CBZCChC G DATA CH D PImagez9AC Q??DATA QQ?DATA DH E C OAlphaz9AC]H ?DATA]HN?DATA EH F D PZz9AClG ?DATAlGN?DATA FH G E PNormalVH?DATAVHP?DATA GH H F PUV |Q?DATA |QP?DATA HH I G PSpeedYH?DATAYHP?DATA IH J H PColorcC??DATAcCQ?DATA JH K I PDiffuse`X??DATA`XQ?DATA KH L J PSpecular M??DATA MQ?DATA LH M K `Shadow yQ ??DATA yQQ?DATA MH N L `AO M ??DATA MQ?DATA NH O M `Reflect'E ??DATA'EQ?DATA OH O N `Refract-E ??DATA-EQ?DATA OH O O `Indirect`lG ??DATA`lGQ?DATA OH O O `IndexOB`XH?DATA`XHN?DATA OH O O `IndexMAuQ?DATAuQN?DATA OH O O `Mist%E?DATA%EN?DATA OH O O `EmitYH??DATAYHQ?DATA OH O O `Environment`&E??DATA`&EQ?DATA OH O O `Diffuse Direct{Q??DATA{QQ?DATA OH P O ӳDiffuse Indirect fC??DATA fCQ?DATA PH P O /Diffuse Color *E??DATA *EQ?DATA PH P P /Glossy Direct$E??DATA$EQ?DATA PH P P /Glossy IndirectpQ??DATApQQ?DATA PH P P /Glossy Color _H??DATA _HQ?DATA PH P P /Transmission Direct`X??DATA`XQ?DATA PH P P /Transmission IndirectQ??DATAQQ?DATA PH P /Transmission Color UH??DATA UHQ?DATA PH P /ImagewDh1B`}Q`r^??DATA`}QQ?DATA PH P P /AlphawDh1B`/EPs^??DATA`/EN??DATA PH P /ZwDh1BMs^??DATAMN??DATA PH /MaskZ9CB^Hq^?DATA^HN?DATA PH /MaskhCzCXDATAXNDATA q^K`r^ ?)C) D PDATA `r^KPs^q^ ?)@) C PDATA Ps^Ks^`r^C)@) P PDATA s^KPs^ ?)@) E PIM ZWIMRender Result Z+ Z+s^wO??DATA s^  ` ` R @pDATA RDATA @pCA `CACameraamera.001?=B B@?BALA ܳ# ܳLALamp ????@AB>??F.?A4B?@@L=@ ???o:??????@?????@t^DATAFs????C?55?55? E??????DATA Eq??DATA @t^ LA ܳ# ܳ 6@LALamp.001A ????@AB>??`F.?A4B?@@L=@ ???o:??????@?????pNDATA`Fs????C?55?55?ZH??????DATAZHq??DATA pN WO ܳWOWorld???6$<6$<6$<??A @A@pA A?L= ף;>? ף;w^DATA w^ OB te yeOBball.disabled e?J e  `w`wpN`NO0).[퓫????????????? Y?? "? ?~"?~?O0.[+??????_}%xIa}%A6gcy?xI%cyC6ǵ4??_}%xIa}%A6gcy?xI%cyC6ǵ4?d8? #=?>=????????@???T= lB SDATApN BDATA`NDATAp`wOSubsurf dM OB ye e teOBball.enabled e`_J e  ZJ ZJNN n21d >H1*f>??????????o?l˱Yj1?)Yj>o? :2>?? "? ?~"?~?O0.[+?????o?1Yj>l˱?Yj[`o?Y-?n2}?o?cy2Xj>íB6gch?٧=cyWY-?́0}?d8? #=?>=????????@???xT= A P@DATAN @BDATANDATAp ZJOSubsurf dM UOB e e yeOBbody.disabled e Tz 2f  BJ`2J0NN*@???????????"? ?~"? ~?O0).[퓫?-D45ӻ+ӻ+?-D4*@5`+??????_}%Ip3}%A6gcy?I%cyC6gO0́4??_}%Ip3}%A6gcy?I%cyC6gO0́4?d8? #=?>=????????@???= @ @DATA0N BDATANDATA|BJs`2J"Screw dM@DATAp`2JOBJSubsurf dM@D IOB e e eOBbody.enabled eRJ 2f  FJo?H1*f>?-D45ӻ+ӻ+?-D4*@5`+?????o?1Yj>l˱?Yj[`o?}="I?o?cy2Xj>íC6gch?ا=cyW}=́I?d8? #=?>=????????@???= xS RDATAPN @BDATANDATA|FJs6 ?u=????? 6JDATA 6J??=L> ף<OB e ;b eOBLamp ܳ  HԎ% R??????{&?W+b=?????6씾t? bfE9L"?%?_>oK?HԎ% R??????22?3?'4'?5씾fE&?t?:L_> b"?oK?#@:Ws@?6씾fE%?YP"? 9?kL|n=,Ⱦ(V#:n@?Dd8?<?>">u=??@???`AJDATA`AJ??=L> ף<OB ;b e eOBLamp.001 ܳ  &@JuJ @??????{&?W+b=?????6씾t? bfE9L"?%?_>oK?&@JuJ @??????22?3?'4'?5씾fE$?t?7L_> b$?oK?DU@-P?6씾fE'?YP"? 9?kJ|n=.ȾHk>瓴'L?Dd8?<?>">u=??@???KJDATAKJ??=L> ף<OB e e ;bOBPlane e D =????????@??? ` LTDATAХNDATANOB e e eOBring.disabled9J Af  `NN*@??????ɿ?????-D45ӻ+-D4ӻ+?*@?????????.D45Ի+cyI6gH6g>kP5cy*@ܗ6́?.D45Ի+cyI6gH6g>kP5cy*@ܗ6́?d8? #=?>=????????@???2f> U $TDATA`N BDATANOB e eOBring.enabledD Af  `NNHB?*@??????ɿ4?ٱ????Dj1oo$*Dj>G?v4HB?*@?????????DjoG1$*?oDj>v4<@|9?Djo0gh>,6gW>rcy=@ź?d8? #=?>=????????@???#f> \a xUDATA`N @BDATANMA @B& B MABronzel.001@L?"???????????L??????????????? #<2L>??L>???2?? ף; ף;C@C@ ????????@?=?==???Px^???????L==ff????DATA Px^  FG [DATA [33ff33         f3         f  !!     f %(**+)(&$!    f%,0!2#3#3$2#1"0!- +)%"    f)2#6&9(:););):(9(7'5%3#0!-)&#   f$5%;*?,A-B.B.B.A-@->+<*9(6&3$0",)%!  3 f8'@,D0G2I3J4J4I3H3G1E0C/@-=+:(6&2#/!+'"  6&B.H3M6O7Q8Q9Q8P8O7M6K5I3F1C/?,<*8'4%1",(#  ffC.L5Q9T;W=X=X>X>W=V<T;R9O7L5I3E0A.>+:(6&1#-(#  1"L5T;Y>\@^B_C_C_B^B]A[?X>U<R9O7K5G2C/?,;)7&2#-("   fF1U<\AaDdFfGfHgHfGeFcEaD^B[@X>T;Q8M5H3D0@-;)7&2#,'  ffP8]AdFhIkKmLmMmLmLkKjJgHdFaD^BZ?V<R9M6I3E0@-;)6&1"+$ fY>dFkKpNrPtQtQtQsQrPpOnMkKhIdF`C\@W=S:N7I3D0?,:)4%. (! . _CkKrPvSyUzV{V{VzVzVxUvSrQnNjJeGaD\AW=S:N6I3D/>,8'2#,$ /!eFqOxT}WYZ[\\]^]}ZxUqPlLgHaD\@W=R9M6H2B.<*6%/!' 0!jJvS~X[^_`beknnia|YsRlLfHaD\@W=Q9K5E0?,9(1"*!  fmL{V\_bcejr~)-(se|YrQkKeG`CZ?U;O7H3B.;)4$,#  3nMY_cehks Ø3ԪGدṆE1tbyVpOjJcF^BX=R9L5E0>+6&. %fkK[bfikp|(ۯFcoḅE(k[uRnMgHaD[@U;N7G2@-7'/!%3A-Zchlntǘ+Oo|pܲP.p_yVqOjJdF^BW=P8I3A-9(0!& 3XdjnquƖ&EaoeٮI*q`|WuRnMgH`CY?R9J4B.9(0!# ]A̍ckoru| ѡ/ENHț4m aYwSpNiIbEZ?S:K4B.9(. 3^ipsuy ȗ&ʚ+Ô'wi`ZyUrPkKcE[@S:J4A.7&)31"fensuwz~ ~v nf`[zUsPkKcE[?R9I3?,2#N6hptvwwwvtoje`[{VsPjJbDY?P8F1:(3P8iptuutrpmid_ZyUqOiI`CV<L5?,&3N7gnqrqpnkgc^YwSnMeF[?P8B. 3^gklkjgc_[zUrPhI]AQ86&fI3gH̉`bb`]YxTqOfH[?@-f3. fH2H3\@X=Q86&#f 3MA B& B @BMAinactive1?N=́=ɠ=??????????L??????????????? #<2L>??L>???2?? ף; ף;G@C@ ????????@?=?==???@y^???????L==ff????DATA @y^   \DATA \33 ff33  f3  f f  f ff 3f ff  fff f    f 3f3  3   33f  3  3  3 f   f3f    f3MA B& BMANoerial>e&?e&?e&???????????L??????????????? #<2L>??L>???2?? ף; ף;G@C@ ????????@?=?==???0z^???????L==ff????DATA 0z^   bDATA b!!!3!!!3cccccccccBBBfBBBf!!!3!!!3ccc̦BBBf!!!3cccBBBf̦BBBfccccccBBBfcccBBBfBBBf̦!!!3BBBfBBBfBBBf̦BBBfBBBfBBBfcccBBBfccccccccccccBBBfccc!!!3BBBf!!!3cccccc!!!3ccc̦!!!3!!!3BBBfccccccccc!!!3ccc!!!3cccccc!!!3BBBfccc̦BBBf!!!3BBBfcccccc̅̅cccBBBf!!!3ME e1 2fMEballhere N m_ B W c c c*xPO???CDATA NDATA cx BDATAH B7*)d>d· g\<۾ g8 g<> gld>d·> g\JC<>۾ g>`#>9d캾d· g>b=9d캾d·> g>bJC=9<>> g>`#l>98 > g>{r=9)?eݧ0)۾5[>w۾p6s>оχ!t[>w>۾p6'2>qχl χq۾ƱL)uχeݧ0)>۾5?ƱL)>uχ?>>χ!gi>>y'i>ys֗>о;Ks)֗оŴsiEsi>E'֗>Ŵg)?֗>>;KgƱ>L)uχ>XJCоχ>[tJC2۾qχ>JC>χ>[ތgJCƱ>L)>uχ>X?JC χ>q>JCleݧ=0)>l[w>sl[w>>ɍ'leݧ=0)>>?lDATA cx WDATA W4x # # # ################# ### ############# ## ## # #!#!#"#"# #### $# $# %# %#&# &#'# '# (#(# )# )# # # # # ### # ###################### ## #!##!#"##"######$##$# &# %#%&#!'#!&#&'#"(#"'#'(##)##(#()#$%#$)#%)#DATA cx m_DATA@ m_3P               !!!"""# ##$ $ $&  %& &%% '!!&' '&&!(""'( (''") ##() )((#% $$)% %))$ ME 2f1 }D?3[%?T`f~?~4=/dL?4\%?Iic>4? {4ί?]? 3?%Rzɦ>Ӽ3b?~߾3P@?4>i3 p?Mz4UDATA cx1JDATAx1J4   DATA cxME =81Ap?>ҽ2Ep>ҽ8ñ>p>=DATA cxc[DATA0c[4####DATA cx`#EDATA`#E3ME Af1 >L=o>43>\=Bm>=>\= pބZ>L=ޑ8AL>ga#ބZ>LޑȾ>\>̽ 43>\BY>Lo+V>H={ !$2>N=L=k> >=\=?m]>==Fw>탄=\=: pS>=:b=L=8AWE>IT=ha#^S>=:b=LȾFw>탄=\:]>=̽  >=\?Y$2>N=Lk+\>L>n?k>E>L=`7>1>633>\=-9!m>>=caֳ]>>\=h p5>=>=L=8A\1>=ga#'5>=>=LȾֳ]>>\h>>̽ca 1>633>\-9!Yk>E>L`7+А>А>ZZ>>L=NN>Tm}>Vm}>\=..m#9Y>%9Y>=5>5>\=>> p*>+>L= 8A>>ga#*>+>L Ⱦ5>5>\>>#9Y>%9Y>̽ Tm}>Vm}>\..Y>>LNN+L>\>?nE>k>L=7`>333>1>\=!-9m>>=ac=׳]>\=h p݄=6>=>L=Ƞ8A=\1>ga#'݄=6>=>LȠȾ=׳]>\h>>̽ac 333>1>\!-9YE>k>L7`+H=U> !{N=#2>L=k>= >\=?m=]>=탄=Fw>\=: p<:b=S>L=㟕8AIT=VE>fa#^<:b=S>L㟕Ⱦ탄=Fw>\:=]>̽ = >\?YN=#2>Lk+2>uH&3>L=o> 353>\=Bm 2>=2>\= pGc|2ބZ>L=ޑ8AXl2L>ha#Gc|2ބZ>LޑȾ2>\ 2>̽  353>\BYuH&3>Lo+DԽV>ޢ{J̽$2>L=$k>| >\=?m]>=JꃄFw>\=: p::bS>L=8AETWE>ha# !^::bS>LȾꃄFw>\:]>̽J | >\?YJ̽$2>L$k+L\>nEk>L=?Ȓ`>2331>\=-9m>=cٳ]>\=h pۄڽ8>=>L=78A̽\1>ha#?'ۄڽ8>=>L7Ⱦٳ]>\h>̽c 2331>\-9YEk>L?Ȓ`+АА>Z >L='N>Ym}Pm}>\=Qѯ.m'9Y 9Y>= 55>\=+> p-(>L=M 8A>ga#Z-(>LM Ⱦ55>\+>'9Y 9Y>̽  Ym}Pm}>\Qѯ.Y >L'N+\L>'?kE>L=n7>1:33>\=!m>=aֳ]>\=5 p5>==L=`_8A\1=ha#n5>==L`_Ⱦֳ]>\5>̽a 1:33>\!YkE>Ln7+VžC=^ !$2I=L=J> {=\=:m]==VFwꃄ=\=; pS8:b=L=aj8AWEDT=ga#{S8:b=LajȾFwꃄ=\;]=̽V  {=\:Y$2I=LJ+̾03ž&)3L=}>43j3\=mkI2=>.2\== pބZ@2L="n8AL02ga#ބZ@2L"nȾ.2\=kI2̽> 43j3\Yž&)3L}+VžCԽ^$2I̽L=J$> {\=:m]=VJFwꃄ\=; pS8:bL=aj8AWEDTga#{ !S8:bLajȾFwꃄ\;]̽VJ  {\:Y$2I̽LJ$+\L'kEL=n?>1033\=ާm=ڳ]\=5 p8>=ڄڽL=`_78A\1̽ha#n?8>=ڄڽL`_7Ⱦڳ]\5̽ 1033\YkELn?+АА L=''>Ym}Pm}\=QQѧm'9Y 9Y= 55\=++ p-(L=MM8Aga#ZZ-(LMMȾ55\++'9Y 9Y̽ Ym}Pm}\QQY L''+L\'EkL=?n>2331\=Ƨm=ٳ]\=5 pۄڽ8>=L=7`_8A̽\1ha#?nۄڽ8>=L7`_Ⱦٳ]\5̽ 2331\YEkL?n+ZԽTž^`̽"2L=$J> \=:m]=JVFw\=; pP:bSL=aj8A\TUEga# !{P:bSLajȾFw\;]̽JV  \:Y`̽"2L$J+2̾uH&3žL=}> 353\=m 2=>2\== pGc|2ބZL="n8AXl2Lha#Gc|2ބZL"nȾ2\= 2̽>  353\YuH&3žL}+4=Wž !^8=$2L=J>l= \=:m=]=V߃=Fw\=; p':b=SL=aj8A2T=WEga#ޢ{':b=SLajȾ߃=Fw\;=]̽V l= \:Y8=$2LJ+L>\?'E>kL=7n>333>1\=!Ƨm>=a=׳]\=5 p݄=6>=L=`_8A=\1ga#n݄=6>=L`_Ⱦ=׳]\5>̽a 333>1\!YE>kL7n+А>АZ >L=N'>Mm}>_m}\=.Qѧm9Y>-9Y= 5>5\=>+ p%>1L= M8A>ha#Z%>1L MȾ5>5\>+9Y>-9Y̽ Mm}>_m}\.QY >LN'+\>Lnk>EL=`?>1>633\=-9ާm>=cֳ]>\=h p5>=>ڽL=78A\1>̽ga#'?5>=>ڽL7Ⱦֳ]>\h>̽c 1>633\-9Yk>EL`?+V>;Խ{$2>A̽L=k$> >t\=?m]>=JFw>僄\=: pS>/:bL=8AWE><Tga#^ !S>/:bLȾFw>僄\:]>̽J  >t\?Y$2>A̽Lk$+DATA cx oDATA o4@## ###NZ####de#.:#DE#O[###cd#kw#$%##CD###########AB###/;#Q]#P\###t#bc###########@A#BC##"#####ab##0<#1=#R^##### !##!"#### #`a####2>#S_##my#### ##+7####ij#gh#)*#v# #'(## ##lm#JV###4@#}~#HI####u## ######FG# ###ef##~#%&###<=# ####LX#-9##"##  ### ##FR##fr#\]##]^###Ua#-.#T_### ##### # #EQ####?@#%1#####jv######*+##JK## ###IU#`k#(4#)5# #z{#KL######gs# ##op#######  ## #89#co#YZ###;G#3?####T`#&####tu## ###st####hi# ####RS######NO##&'#y###Xd# #!-#vw##0;#######12#x###BN#####uv##MY###7C#,8# ######~#TU#^j##>J#*###67# ###45####34####_k##56#+#VW##?K##yz########UV### ###no#rs#x#####}###9:#]i#\h#|##78#=I#<H##(#)#{|########CO####[g##pq##'####XY####dp#z#|}####:F#$0#mn# #Z[#%##########./#`l##23######Ye# # ,##AM#8D#QR#OP#6B#####Wc#jk#### ###bn###=>#".#<G#5A##01####Vb#########&2#######,-##>?#LM###s#MN#####eq# #  ###!##$/#^_#######  # ### #ht#iu#xy#HT###+,##'3#####GS#qr##lx#w#####{#WX###KW###/##:;##IJ###nz######DP#########Zf# #*6##()#$##o{##fg####am# ###[\#@L#9E##HS##EF#p|#q}##### ###PQ#######r~###lw##DATA  x UDATA U3               !!""## $%%&&''(())**++,  ,-!!-.""./##/$$01%%12&&23''34((45))56**67++78,,89--9:..:;//;0$0<=11=>22>?33?@44@A55AB66BC77CD88DE99EF::FG;;G<0<HI==IJ>>JK??KL@@LMAAMNBBNOCCOPDDPQEEQRFFRSGGSH<HTUIIUVJJVWKKWXLLXYMMYZNNZ[OO[\PP\]QQ]^RR^_SS_THT`aUUabVVbcWWcdXXdeYYefZZfg[[gh\\hi]]ij^^jk__k`T`lmaamnbbnoccopddpqeeqrffrsggsthhtuiiuvjjvwkkwl`lxymmyznnz{oo{|pp|}qq}~rr~ssttuuvvwwxlxyyzz{{||}}~~x                        BR, t_w {_BRAddh.001?`F??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0t_??????????L>?????????????????????????????DATA`Fs????C?~6=~.=@h[??????DATA0@h[q?>k?@? ף=?BR, {_w _ t_BRBlob001?F??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0{_??????????L>?????????????????????????????DATAFs????C?._rah[??????DATA0h[q?>ףp?@?u=?BR, _w _ {_BRBlur.004?F??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0_??????????L>?????????????????????????????DATAFs????C?~6=~.=i[??????DATA0i[q?>k?@? ף=?BR, _w t _BRBrush? F??????????L>?????????????????????????????# Kfff?=??????>!?>>>>?DATA0_??????????L>?????????????????????????????DATA Fs????C?._ra`i[??????DATA0`i[q?>ףp?@?u=?BR, tw t _BRClay001?`F??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0 t??????????L>?????????????????????????????DATA`Fs????C?._rai[??????DATA0i[q?>ףp?@?u=?BR, tw t tBRClone001?F??????????L>?????????????????????????????# Kfff?=???333???>!>???DATA0t??????????L>?????????????????????????????DATAFs????C?~6=~.= j[??????DATA0 j[q?>k?@? ף=?BR, tw t tBRCrease001?F??????????L>?????????????????????????????# Kfff?=???>??>!>?>>>>?DATA0t??????????L>?????????????????????????????DATAFs????C?a2p? j[??????DATA0j[q?>?@? #=?BR, tw &t tBRDarken06? F??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0t??????????L>?????????????????????????????DATA Fs????C?~6=~.=j[??????DATA0j[q?>k?@? ף=?BR, &tw -t tBRDraw.001?`F??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0&t??????????L>?????????????????????????????DATA`Fs????C?._ra@k[??????DATA0@k[q?>ףp?@?u=?BR, -tw 4t &tBRFill/Deepen001?F??????????L>?????????????????????????????# Kfff?=???? ??>!>??>>??DATA0-t??????????L>?????????????????????????????DATAFs????C?._rak[??????DATA0k[q?>ףp?@?u=?BR, 4tw ;t -tBRFlatten/Contrast001?F??????????L>?????????????????????????????# Kfff?=??????>!>??>>??DATA04t??????????L>?????????????????????????????DATAFs????C?._ral[??????DATA0l[q?>ףp?@?u=?BR, ;tw Bt 4tBRGrab001? F??????????L>?????????????????????????????K Kfff?=???L>??>!>>?>DATA0;t??????????L>?????????????????????????????DATA Fs????C?._ra`l[??????DATA0`l[q?>ףp?@?u=?BR, Btw It ;tBRInflate/Deflate001?`F??????????L>?????????????????????????????# Kfff?=??????>!>@?@?@?>>>DATA0Bt??????????L>?????????????????????????????DATA`Fs????C?._ral[??????DATA0l[q?>ףp?@?u=?BR, Itw Pt BtBRLayer001?F??????????L>?????????????????????????????# Kfff?=??????>!>?>>DATA0It??????????L>?????????????????????????????DATAFs????C?._ra m[??????DATA0 m[q?>ףp?@?u=?BR, Ptw Wt ItBRLighten5?F??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0Pt??????????L>?????????????????????????????DATAFs????C?~6=~.=m[??????DATA0m[q?>k?@? ף=?BR, Wtw ^t PtBRMixh? F??????????L>????????????????????????????? # Kfff?=???333???>!>???DATA0Wt??????????L>?????????????????????????????DATA Fs????C?~6=~.=m[??????DATA0m[q?>k?@? ף=?BR, ^tw et WtBRMultiply?`F??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0^t??????????L>?????????????????????????????DATA`Fs????C?~6=~.=@n[??????DATA0@n[q?>k?@? ף=?BR, etw lt ^tBRNudge001?F??????????L>?????????????????????????????# Kfff?=???? ??>!>>?>DATA0et??????????L>?????????????????????????????DATAFs????C?._ran[??????DATA0n[q?>ףp?@?u=?BR, ltw st etBRPinch/Magnify001?F??????????L>?????????????????????????????# Kfff?=??????>!>@?@?@?>>>DATA0lt??????????L>?????????????????????????????DATAFs????C?._rao[??????DATA0o[q?>ףp?@?u=?BR, stw zt ltBRPolish001? F??????????L>?????????????????????????????# Kfff?=???????>!>??>>??DATA0st??????????L>?????????????????????????????DATA Fs????C?._ra`o[??????DATA0`o[q?>ףp?@?u=?BR, ztw t stBRScrape/Peaks001?`F??????????L>?????????????????????????????# Kfff?=???? ??>!>??>>??DATA0zt??????????L>?????????????????????????????DATA`Fs????C?._rao[??????DATA0o[q?>ףp?@?u=?BR, tw t ztBRSculptDraw?F??????????L>?????????????????????????????# Kfff?=??????>!wN??>>>>?DATA0t??????????L>?????????????????????????????DATAFs????C?._ra ??????DATA0 q?>ףp?@?u=?BR, tw t tBRSmear001?F??????????L>?????????????????????????????# Kfff?=???L>??>!>???DATA0t??????????L>?????????????????????????????DATAFs????C?~6=~.= ??????DATA0 q?>k?@? ף=?BR, tw t tBRSmooth001?F??????????L>?????????????????????????????#Kfff?=??????>!>@?@?@?DATA0t??????????L>?????????????????????????????DATAFs????C?._ra@??????DATA0@q?>ףp?@?u=?BR, tw t tBRSnake Hook001?O??????????L>?????????????????????????????K Kfff?=???? ??>!>>?>DATA0t??????????L>?????????????????????????????DATAOs????C?._ra??????DATA0q?>ףp?@?u=?BR, tw t tBRSoften01?O??????????L>?????????????????????????????# Kfff?=???L>??>!>???DATA0t??????????L>?????????????????????????????DATAOs????C?~6=~.=??????DATA0q?>k?@? ף=?BR, tw t tBRSubtract? O??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0t??????????L>?????????????????????????????DATA Os????C?~6=~.=`??????DATA0`q?>k?@? ף=?BR, tw t tBRTexDraw?`O??????????L>?????????????????????????????# Kfff?=???333???>!>???>>?DATA0t??????????L>?????????????????????????????DATA`Os????C?._ra??????DATA0q?>ףp?@?u=?BR, tw t tBRThumb001?O??????????L>?????????????????????????????K Kfff?=???? ??>!>>?>DATA0t??????????L>?????????????????????????????DATAOs????C?._ra@C??????DATA0@Cq?>ףp?@?u=?BR, tw tBRTwist001?`X??????????L>?????????????????????????????K Kfff?=??????>!>>?>DATA0t??????????L>?????????????????????????????DATA`Xs????C?._raC??????DATA0Cq?>ףp?@?u=?DNA1 SDNANAME+ *next*prev*data*first*lastxyxminxmaxyminymax*pointergroupvalval2typesubtypeflagname[64]saveddatalentotallen*newid*libname[66]padusicon_idpad2*propertiesid*idblock*filedataname[1024]filepath[1024]tot*parentw[2]h[2]changed[2]changed_timestamp[2]*rect[2]*obblocktypeadrcodename[128]*bp*beztmaxrcttotrctvartypetotvertipoextraprtbitmaskslide_minslide_maxcurval*drivercurvecurshowkeymuteipoposrelativetotelem*weightsvgroup[64]sliderminslidermax*adt*refkeyelemstr[64]elemsizeblock*ipo*fromtotkeyslurph*line*formatblenlinenostartendpad1flagscolor[4]pad[4]*namenlineslines*curl*sellcurcselcmarkers*undo_bufundo_posundo_len*compiledmtimesizeseekdtxpassepartalphaclipstaclipendlensortho_scaledrawsizesensor_xsensor_yshiftxshiftyYF_dofdist*dof_obsensor_fitpad[7]*sceneframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassibufs*gputexture*anim*rr*renders[8]render_slotlast_render_slotsourcelastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_typegen_flagaspxaspytexcomaptomaptonegblendtype*object*texuvname[64]projxprojyprojzmappingofs[3]size[3]rottexflagcolormodelpmaptopmaptonegnormapspacewhich_outputbrush_map_modergbkdef_varcolfacvarfacnorfacdispfacwarpfaccolspecfacmirrfacalphafacdifffacspecfacemitfachardfacraymirrfactranslfacambfaccolemitfaccolreflfaccoltransfacdensfacscatterfacreflfactimefaclengthfacclumpfacdampfackinkfacroughfacpadensfacgravityfaclifefacsizefacivelfacfieldfacshadowfaczenupfaczendownfacblendfac*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizefalloff_typefalloff_softnessradiuscolor_sourcetotpointspdpadpsyspsys_cache_spaceob_cache_space*point_tree*point_datanoise_sizenoise_depthnoise_influencenoise_basispdpad3[3]noise_facspeed_scalefalloff_speed_scalepdpad2*coba*falloff_curveresol[3]interp_typefile_formatextendsmoked_typeint_multiplierstill_framesource_path[1024]*datasetcachedframeoceanmod[64]outputnoisesizeturbulbrightcontrastsaturationrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxtexfilterafmaxxrepeatyrepeatcheckerdistnablaiuser*nodetree*plugin*env*pd*vd*otuse_nodesloc[3]rot[3]mat[4][4]min[3]max[3]cobablend_color[3]blend_factorblend_typepad[3]modetotexshdwrshdwgshdwbshdwpadenergydistspotsizespotblendhaintatt1att2*curfalloffshadspotsizebiassoftcompressthreshpad5[3]bufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizezadapt_threshray_samp_methodtexactshadhalostepsun_effect_typeskyblendtypehorizon_brightnessspreadsun_brightnesssun_sizebackscattered_lightsun_intensityatm_turbidityatm_inscattering_factoratm_extinction_factoratm_distance_factorskyblendfacsky_exposuresky_colorspacepad4[6]*mtex[18]pr_texturepad6[4]densityemissionscatteringreflectionemission_col[3]transmission_col[3]reflection_col[3]density_scaledepth_cutoffasymmetrystepsize_typeshadeflagshade_typeprecache_resolutionstepsizems_diffms_intensityms_spreadalpha_blendface_orientationmaterial_typespecrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyvolgamefresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2gloss_mirgloss_trasamp_gloss_mirsamp_gloss_traadapt_thresh_miradapt_thresh_traaniso_gloss_mirdist_mirfadeto_mirshade_flagmode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easestrand_surfnorstrand_minstrand_widthfadestrand_uvname[64]sbiaslbiasshad_alphaseptexrgbselpr_typepr_backpr_lampml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_spec*groupfrictionfhreflectfhdistxyfrictdynamodesss_radius[3]sss_col[3]sss_errorsss_scalesss_iorsss_colfacsss_texfacsss_frontsss_backsss_flagsss_presetmapto_texturedshadowonly_flagindexgpumaterial*bbselcol1selcol2zquat[4]expxexpyexpzradrad2s*mat*imatelemsdisp*editelems**matflag2totcolwiresizerendersizethresh*lastelemvec[3][3]alfaweighth1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsvtilt_interpradius_interpcharidxkernwhnurbs*keyindexshapenrnurb*editnurb*bevobj*taperobj*textoncurve*path*keybevdrawflagtwist_modetwist_smoothsmallcaps_scalepathlenbevresolwidthext1ext2resolu_renresolv_renactnu*lastselspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*str*selboxes*editfontfamily[24]*vfont*vfontb*vfonti*vfontbisepcharctimetotboxactbox*tbselstartselend*strinfocurinfo*mpoly*mtpoly*mloop*mloopuv*mloopcol*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselect*edit_meshvdataedatafdatapdataldatatotedgetotfacetotselecttotpolytotloopact_facesmoothreshsubdivsubdivrsubsurftypeeditflag*mr*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasebweightdef_nr*dwtotweightco[3]no[3]loopstartveuv[2]co[2]fis[256]totdisp(*disps)()v[4]midpad[2]v[2]*faces*colfaces*edges*vertslevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creasesstackindex*errormodifier*texture*map_objectuvlayer_name[64]uvlayer_tmptexmappingsubdivTyperenderLevels*emCache*mCachedefaxispad[6]lengthrandomizeseed*ob_arm*start_cap*end_cap*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerance*mirror_obsplit_anglevalueresval_flagslim_flagse_flagsbevel_angledefgrp_name[64]*domain*flow*colltimestrengthdirectionmidlevel*projectors[10]*imagenum_projectorsaspectxaspectyscalexscaleypercentfaceCountfacrepeat*objectcenterstartxstartyheightnarrowspeeddampfallofftimeoffslifetimedeformflagmulti*prevCossubtarget[64]parentinv[4][4]cent[3]*indexartotindexforce*clothObject*sim_parms*coll_parms*point_cacheptcaches*x*xnew*xold*current_xnew*current_x*current_v*mfacesnumvertsnumfacestime_xtime_xnew*bvhtree*v*dmcfraoperationvertextotinfluencegridsize*bindinfluences*bindoffsets*bindcagecostotcagevert*dyngrid*dyninfluences*dynverts*pad2dyngridsizedyncellmin[3]dyncellwidthbindmat[4][4]*bindweights*bindcos(*bindfunc)()*psystotdmverttotdmedgetotdmfacepositionrandom_position*facepavgroupprotectlvlsculptlvltotlvlsimple*fss*target*auxTargetvgroup_name[64]keepDistshrinkTypeshrinkOptsprojAxissubsurfLevels*originfactorlimit[2]originOptsoffset_facoffset_fac_vgcrease_innercrease_outercrease_rimmat_ofsmat_ofs_rim*ob_axisstepsrender_stepsiterscrew_ofsangle*ocean*oceancacheresolutionspatial_sizewind_velocitysmallest_wavewave_alignmentwave_directionwave_scalechop_amountfoam_coveragebakestartbakeendcachepath[1024]foamlayername[64]cachedgeometry_moderefreshrepeat_xrepeat_yfoam_fade*object_from*object_tofalloff_radiusedit_flagsdefault_weight*cmap_curveadd_thresholdrem_thresholdmask_constantmask_defgrp_name[64]mask_tex_use_channel*mask_texture*mask_tex_map_objmask_tex_mappingmask_tex_uvlayer_name[64]pad_i1defgrp_name_a[64]defgrp_name_b[64]default_weight_adefault_weight_bmix_modemix_setpad_c1[6]proximity_modeproximity_flags*proximity_ob_targetmin_distmax_distpad_s1*canvas*brushthresholdscalehermite_num*lattpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*def*latticedatalatmat[4][4]*editlattvec[8][3]*sculptpartypepar1par2par3parsubstr[64]*track*proxy*proxy_group*proxy_from*action*poselib*pose*gpdavs*mpathconstraintChannelseffectdefbasemodifiersrestore_mode*matbitsactcoldloc[3]orig[3]dsize[3]dscale[3]drot[3]dquat[4]rotAxis[3]drotAxis[3]rotAngledrotAngleobmat[4][4]constinv[4][4]imat_ren[4][4]laypad6colbitstransflagprotectflagtrackflagupflagnlaflagipoflagscaflagscavisflagpad5dupondupoffdupstadupendsfmassdampinginertiaformfactorrdampingmarginmax_velmin_velm_contactProcessingThresholdobstacleRadrotmodeboundtypecollision_boundtyperestrictflagdtempty_drawtypeempty_drawsizedupfacescapropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2*bsoftsoftflaganisotropicFriction[3]constraintsnlastripshooksparticlesystem*soft*dup_groupbody_typeshapeflag*fluidsimSettings*derivedDeform*derivedFinallastDataMaskcustomdata_maskstateinit_stategpulamppc_ids*duplilistima_ofs[2]curindexactiveoriglayomat[4][4]orco[3]no_drawanimateddeflectforcefieldshapetex_modekinkkink_axiszdirf_strengthf_dampf_flowf_sizef_powermaxdistmindistf_power_rmaxradminradpdef_damppdef_rdamppdef_permpdef_frictpdef_rfrictpdef_sticknessabsorptionpdef_sbdamppdef_sbiftpdef_sboftclump_facclump_powkink_freqkink_shapekink_ampfree_endtex_nabla*rngf_noiseweight[13]global_gravityrt[3]totdataframetotpointdata_types*data[8]*cur[8]extradatastepsimframestartframeendframeeditframelast_exactlast_validcompressionprev_name[64]info[64]path[1024]*cached_framesmem_cache*edit(*free_edit)()linStiffangStiffvolumeviterationspiterationsditerationsciterationskSRHR_CLkSKHR_CLkSSHR_CLkSR_SPLT_CLkSK_SPLT_CLkSS_SPLT_CLkVCFkDPkDGkLFkPRkVCkDFkMTkCHRkKHRkSHRkAHRcollisionflagsnumclusteriterationsweldingtotspring*bpoint*bspringmsg_lockmsg_valuenodemassnamedVG_Mass[64]gravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupnamedVG_Softgoal[64]fuzzynessinspringinfrictnamedVG_Spring_K[64]efraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokesolver_IDplasticspringpreload*scratchshearstiffinpush*pointcache*effector_weightslcom[3]lrot[3][3]lscale[3][3]last_framevel[3]*fmdshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgrav[3]animStartanimEndbakeStartbakeEndframeOffsetgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshBBsurfdataPath[1024]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsparticleInfSizeparticleInfAlphafarFieldSize*meshVelocitiescpsTimeStartcpsTimeEndcpsQualityattractforceStrengthattractforceRadiusvelocityforceStrengthvelocityforceRadiuslastgoodframeanimRatemistypehorrhorghorbzenrzengzenbfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypeocclusionResphysicsEngineticratemaxlogicstepphysubstepmaxphystepmisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolorao_adapt_threshao_adapt_speed_facao_approx_errorao_approx_correctionao_indirect_energyao_env_energyao_pad2ao_indirect_bouncesao_padao_samp_methodao_gather_methodao_approx_passes*aosphere*aotablesselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecTypecodecSpatialQualitycodeccodecFlagscolorDepthcodecTemporalQualityminSpatialQualityminTemporalQualitykeyFrameRatebitRateaudiocodecTypeaudioSampleRateaudioBitDepthaudioChannelsaudioCodecFlagsaudioBitRateaudio_codecvideo_bitrateaudio_bitrateaudio_mixrateaudio_channelsaudio_padaudio_volumegop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemainspeed_of_sounddoppler_factordistance_model*mat_override*light_overridelay_zmasklayflagpassflagpass_xorimtypeplanesqualitycompressexr_codeccineon_flagcineon_whitecineon_blackcineon_gammajp2_flagim_format*avicodecdata*qtcodecdataqtcodecsettingsffcodecdatasubframepsfrapefraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribframe_stepstereomodedimensionspresetmaximsizexschyschxpartsypartssubimtypedisplaymodescemoderaytrace_optionsraytrace_structureocrespad4alphamodeosafrs_secedgeintsafetyborderdisprectlayersactlaymblur_samplesxaspyaspfrs_sec_basegausscolor_mgt_flagpostgammaposthuepostsatdither_intensitybake_osabake_filterbake_modebake_flagbake_normal_spacebake_quad_splitbake_maxdistbake_biasdistbake_padpic[1024]stampstamp_font_idstamp_udata[768]fg_stamp[4]bg_stamp[4]seq_prev_typeseq_rend_typeseq_flagpad5[5]simplify_flagsimplify_subsurfsimplify_shadowsamplessimplify_particlessimplify_aossscineonwhitecineonblackcineongammajp2_presetjp2_depthrpad3domeresdomemodedomeangledometiltdomeresbuf*dometextengine[32]name[32]particle_percsubsurf_maxshadbufsample_maxao_errortiltresbuf*warptextcol[3]cellsizecellheightagentmaxslopeagentmaxclimbagentheightagentradiusedgemaxlenedgemaxerrorregionminsizeregionmergesizevertsperpolydetailsampledistdetailsamplemaxerrorframingplayerflagrt1rt2aasamplespad4[3]domestereoflageyeseparationrecastDatamatmodeexitkeyobstacleSimulationlevelHeight*camera*paint_cursorpaint_cursor_col[4]paintseam_bleednormal_anglescreen_grab_size[2]*paintcursorinverttotrekeytotaddkeybrushtypebrush[7]emitterdistselectmodeedittypedraw_stepfade_framesradial_symm[3]last_xlast_ylast_angledraw_anchoredanchored_sizeanchored_location[3]anchored_initial_mouse[2]draw_pressurepressure_valuespecial_rotation*vpaint_prev*wpaint_prevmat[3][3]unprojected_radius*vpaint*wpaint*uvsculptvgroup_weightcornertypeeditbutflagjointrilimitdegrturnextr_offsdoublimitnormalsizeautomergesegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_marginuvcalc_mapdiruvcalc_mapalignuvcalc_flaguv_flaguv_selectmodeuv_subsurf_levelgpencil_flagsautoik_chainlenimapaintparticleproportional_sizeselect_threshclean_threshautokey_modeautokey_flagmultires_subdiv_typepad2[5]skgen_resolutionskgen_threshold_internalskgen_threshold_externalskgen_length_ratioskgen_length_limitskgen_angle_limitskgen_correlation_limitskgen_symmetry_limitskgen_retarget_angle_weightskgen_retarget_length_weightskgen_retarget_distance_weightskgen_optionsskgen_postproskgen_postpro_passesskgen_subdivisions[3]skgen_multi_level*skgen_templatebone_sketchingbone_sketching_convertskgen_subdivision_numberskgen_retarget_optionsskgen_retarget_rollskgen_side_string[8]skgen_num_string[8]edge_modeedge_mode_live_unwrapsnap_modesnap_flagsnap_targetproportionalprop_modeproportional_objectspad[5]auto_normalizemultipaintuse_uv_sculptuv_sculpt_settingsuv_sculpt_tooluv_relax_methodsculpt_paint_settingssculpt_paint_unified_sizesculpt_paint_unified_unprojected_radiussculpt_paint_unified_alphaunified_paint_settingstotobjtotlamptotobjseltotcurvetotmeshtotarmaturescale_lengthsystemsystem_rotationgravity[3]quick_cache_step*world*setbase*basact*obeditcursor[3]twcent[3]twmin[3]twmax[3]layactlay_updated*ed*toolsettings*statsaudiotransform_spaces*sound_scene*sound_scene_handle*sound_scrub_handle*speaker_handles*fps_info*theDagdagisvaliddagflagsactive_keyingsetkeyingsetsgmunitphysics_settings*clipcustomdata_mask_modalcuserblendviewwinmat[4][4]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]viewmatob[4][4]persmatob[4][4]twmat[4][4]viewquat[4]zfaccamdxcamdypixsizecamzoomtwdrawflagis_persprflagviewlockperspclip[6][4]clip_local[6][4]*clipbb*localvd*ri*render_engine*depths*sms*smooth_timerlviewquat[4]lpersplviewgridviewtwangle[3]rot_anglerot_axis[3]pad2[4]regionbasespacetypeblockscaleblockhandler[8]bundle_sizebundle_drawtypelay_used*ob_centrebgpicbase*bgpicob_centre_bone[64]drawtypeob_centre_cursorscenelockaroundgridnearfarmodeselectgridlinesgridsubdivgridflagtwtypetwmodetwflagpad2[2]afterdraw_transpafterdraw_xrayafterdraw_xraytranspzbufxraypad3[2]*properties_storageverthormaskmin[2]max[2]minzoommaxzoomscrollscroll_uikeeptotkeepzoomkeepofsalignwinxwinyoldwinxoldwiny*tab_offsettab_numtab_currpt_maskv2d*adsghostCurvesautosnapcursorValmainbmainbomainbuserre_alignpreviewtexture_contextpathflagdataicon*pinid*texuserrender_sizechanshownzebrazoomtitle[32]dir[1056]file[256]renamefile[256]renameedit[256]filter_glob[64]active_filesel_firstsel_lastsortdisplayf_fpfp_str[8]scroll_offset*params*files*folders_prev*folders_next*op*smoothscroll_timer*layoutrecentnrbookmarknrsystemnrtree*treestoresearch_string[32]search_tseoutlinevisstoreflagsearch_flags*cumapscopessample_line_histcursor[2]centxcentycurtilelockpindt_uvstickydt_uvstretch*texttopviewlinesmenunrlheightcwidthlinenrs_totleftshowlinenrstabnumbershowsyntaxline_hlightoverwritelive_editpix_per_linetxtscrolltxtbarwordwrapdopluginsfindstr[256]replacestr[256]margin_column*drawcache*py_draw*py_event*py_button*py_browsercallback*py_globaldictlastspacescriptname[1024]scriptarg[256]*script*but_refs*arraycachescache_display*idaspectpadfmxmy*edittreetreetypetexfromshaderfromlinkdraglen_alloccursorscrollbackhistoryprompt[256]language[32]sel_startsel_endfilter[64]xlockofylockofuserpath_lengthloc[2]stabmat[4][4]unistabmat[4][4]postproc_flagfilename[1024]blf_iduifont_idr_to_lpointskerningitalicboldshadowshadxshadyshadowalphashadowcolorpaneltitlegrouplabelwidgetlabelwidgetpanelzoomminlabelcharsminwidgetcharscolumnspacetemplatespaceboxspacebuttonspacexbuttonspaceypanelspacepanelouteroutline[4]inner[4]inner_sel[4]item[4]text[4]text_sel[4]shadedshadetopshadedownalpha_checkinner_anim[4]inner_anim_sel[4]inner_key[4]inner_key_sel[4]inner_driven[4]inner_driven_sel[4]header[4]show_headerwcol_regularwcol_toolwcol_textwcol_radiowcol_optionwcol_togglewcol_numwcol_numsliderwcol_menuwcol_pulldownwcol_menu_backwcol_menu_itemwcol_boxwcol_scrollwcol_progresswcol_list_itemwcol_statepaneliconfile[256]icon_alphaback[4]title[4]text_hi[4]header_title[4]header_text[4]header_text_hi[4]button[4]button_title[4]button_text[4]button_text_hi[4]list[4]list_title[4]list_text[4]list_text_hi[4]panel[4]panel_title[4]panel_text[4]panel_text_hi[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]speaker[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[4]edge_facesel[4]edge_crease[4]face[4]face_select[4]face_dot[4]extra_edge_len[4]extra_face_angle[4]extra_face_area[4]pad3[4]normal[4]vertex_normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]cframe[4]nurb_uline[4]nurb_vline[4]act_spline[4]nurb_sel_uline[4]nurb_sel_vline[4]lastsel_point[4]handle_free[4]handle_auto[4]handle_vect[4]handle_align[4]handle_auto_clamped[4]handle_sel_free[4]handle_sel_auto[4]handle_sel_vect[4]handle_sel_align[4]handle_sel_auto_clamped[4]ds_channel[4]ds_subchannel[4]console_output[4]console_input[4]console_info[4]console_error[4]console_cursor[4]vertex_sizeoutline_widthfacedot_sizenoodle_curvingsyntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]editmesh_active[4]handle_vertex[4]handle_vertex_select[4]handle_vertex_sizemarker_outline[4]marker[4]act_marker[4]sel_marker[4]dis_marker[4]lock_marker[4]bundle_solid[4]path_before[4]path_after[4]camera_path[4]hpad[7]preview_back[4]preview_stitch_face[4]preview_stitch_edge[4]preview_stitch_vert[4]preview_stitch_stitchable[4]preview_stitch_unstitchable[4]preview_stitch_active[4]match[4]selected_highlight[4]solid[4]tuitbutstv3dtfiletipotinfotacttnlatseqtimatexttoopsttimetnodetlogictuserpreftconsoletcliptarm[20]active_theme_areamodule[64]spec[4]dupflagsavetimetempdir[768]fontdir[768]renderdir[1024]textudir[768]plugtexdir[768]plugseqdir[768]pythondir[768]sounddir[768]image_editor[1024]anim_player[1024]anim_player_presetv2d_min_gridsizetimecode_styleversionsdbl_click_timegameflagswheellinescrolluiflaglanguageuserprefviewzoommixbufsizeaudiodeviceaudiorateaudioformataudiochannelsdpiencodingtransoptsmenuthreshold1menuthreshold2themesuifontsuistyleskeymapsuser_keymapsaddonskeyconfigstr[64]undostepsundomemorygp_manhattendistgp_euclideandistgp_erasergp_settingstb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratewmdrawmethoddragthresholdmemcachelimitprefetchframesframeserverportpad_rot_angleobcenter_diarvisizervibrightrecent_filessmooth_viewtxglreslimitcurssizecolor_picker_typeipo_newkeyhandles_newscrcastfpsscrcastwaitwidget_unitanisotropic_filteruse_16bit_texturespad8ndof_sensitivityndof_flagglalphacliptext_renderpad9coba_weightsculpt_paint_overlay_col[3]tweak_thresholdauthor[80]compute_device_typecompute_device_idvertbaseedgebaseareabase*newsceneredraws_flagfulltempwiniddo_drawdo_refreshdo_draw_gesturedo_draw_paintcursordo_draw_dragswapmainwinsubwinactive*animtimer*contexthandler[8]*newvvec*v1*v2*typepanelname[64]tabname[64]drawname[64]ofsxofsysizexsizeylabelofsruntime_flagcontrolsnapsortorder*paneltab*activedatalist_scrolllist_sizelist_last_lenlist_grip_sizelist_search[64]*v3*v4*fullbutspacetypeheadertypespacedatahandlersactionzoneswinrctdrawrctswinidregiontypealignmentdo_draw_overlayuiblockspanels*headerstr*regiondatasubvstr[4]subversionpadsminversionminsubversionwinpos*curscreen*curscenefileflagsglobalfrevisionname[256]orig_widthorig_heightbottomrightxofsyofslift[3]gamma[3]gain[3]dir[768]tcbuild_size_flagsbuild_tc_flagsdonestartstillendstill*stripdata*crop*transform*color_balance*instance_private_data**current_private_data*tmpstartofsendofsmachinestartdispenddispsatmulhandsizeanim_preseekstreamindex*strip*scene_cameraeffect_faderspeed_fader*seq1*seq2*seq3seqbase*sound*scene_soundpitchpanscenenrmulticam_sourcestrobe*effectdataanim_startofsanim_endofsblend_modeblend_opacity*oldbasep*parseq*seqbasepmetastack*act_seqact_imagedir[1024]act_sounddir[1024]over_ofsover_cfraover_flagover_borderedgeWidthforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyInixIniyInirotIniinterpolationuniform_scale*frameMapglobalSpeedlastValidFramebuttypeuserjitstatotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[64]vgroupname_v[64]*keysminfacnrusedusedelem*poinresetdistlastval*makeyqualqual2targetName[64]toggleName[64]value[64]maxvalue[64]delaydurationmaterialName[64]damptimerpropname[64]matname[64]axisflagposechannel[64]constraint[64]*fromObjectsubject[64]body[64]otypepulsefreqtotlinks**linksleveltapjoyindexaxis_singleaxisfbuttonhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalostate_mask*actframeProp[64]blendinpriorityend_resetstrideaxisstridelengthlayer_weightmin_gainmax_gainreference_distancemax_distancerolloff_factorcone_inner_anglecone_outer_anglecone_outer_gainsndnrsound3Dpad6[1]*melinVelocity[3]angVelocity[3]localflagdyn_operationforceloc[3]forcerot[3]pad1[3]linearvelocity[3]angularvelocity[3]*referenceminmaxrotdampminloc[3]maxloc[3]minrot[3]maxrot[3]matprop[64]butstabutenddistributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[64]*toObjectbodyTypefilename[64]loadaniname[64]int_argfloat_arg*subtargetfacingaxisvelocityaccelerationturnspeedupdateTime*navmeshgo*newpackedfileattenuationdistance*cache*waveform*playback_handle*lamprengobjectdupli_ofs[3]*propchildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]arm_rollxwidthzwidthease1ease2rad_headrad_tailpad[1]bonebasechainbase*edbo*act_bone*act_edbone*sketchgevertdeformerlayer_usedlayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefpathbcpathac*pointsstart_frameend_frameghost_sfghost_efghost_bcghost_acghost_typeghost_stepghost_flagpath_typepath_steppath_viewflagpath_bakeflagpath_sfpath_efpath_bcpath_acikflagagrp_indexconstflagselectflagpad0[6]*bone*childiktreesiktree*custom*custom_txeul[3]chan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretchikrotweightiklinweight*tempchanbase*chanhashproxy_layerstride_offset[3]cyclic_offset[3]agroupsactive_groupiksolver*ikdata*ikparamproxy_act_bone[64]numiternumstepminstepmaxstepsolverfeedbackmaxveldampmaxdampepschannelscustomColcscurvesgroupsactive_markeridroot*source*filter_grpsearchstr[64]filterflagrenameIndexadstimeslide*grpname[30]ownspacetarspaceenforceheadtaillin_errorrot_error*tarmatrix[4][4]spacerotOrdertarnumtargetsiterationsrootbonemax_rootbone*poletarpolesubtarget[64]poleangleorientweightgrabtarget[3]numpointschainlenxzScaleModereserved1reserved2minmaxflagstuckcache[3]lockflagfollowflagvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzinvmat[4][4]fromtomap[3]expofrom_min[3]from_max[3]to_min[3]to_max[3]rotAxiszminzmaxpad[9]track[64]object[64]*depth_obchannel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettypeis_copyexternal*new_sock*storagelimitlocxlocy*default_valuestack_indexstack_typeown_indexto_index*groupsock*linkns*rectxsizeysize*new_nodelastyoutputsminiwidthupdatelabel[64]custom1custom2custom3custom4need_execexec*threaddatatotrbutrprvr*block*typeinfo*fromnode*tonode*fromsock*tosocknodeslinksinitcur_indexnodetype*execdata(*progress)()(*stats_draw)()(*test_break)()*tbh*prh*sdhvalue[3]value[4]cyclicmoviesamplesmaxspeedminspeedcurvedpercentxpercentybokehgammaimage_in_widthimage_in_heightcenter_xcenter_yspinwrapsigma_colorsigma_spacehuet1t2t3fstrengthfalphakey[4]algorithmchannelx1x2y1y2fac_x1fac_x2fac_y1fac_y2colname[64]bktypepad_c1gamcono_zbuffstopmaxblurbthreshrotationpad_f1*dict*nodecolmodmixfadeangle_ofsmcjitprojfitslope[3]power[3]lift_lgg[3]gamma_inv[3]limchanunspilllimscaleuspillruspillguspillbtex_mappingcolor_mappingsun_direction[3]turbiditycolor_spacegradient_typecoloringmusgrave_typewave_typeshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablepresetchanged_timestampcurrcliprcm[4]black[3]white[3]bwmul[3]sample[3]x_resolutiondata_r[256]data_g[256]data_b[256]data_luma[256]sample_fullsample_linesaccuracywavefrm_modewavefrm_alphawavefrm_yfacwavefrm_heightvecscope_alphavecscope_heightminmax[3][2]hist*waveform_1*waveform_2*waveform_3*vecscopewaveform_totoffset[2]clonemtex*icon_imbuficon_filepath[1024]normal_weightob_modejittersmooth_stroke_radiussmooth_stroke_factorratergb[3]sculpt_planeplane_offsetsculpt_toolvertexpaint_toolimagepaint_toolpad3[5]autosmooth_factorcrease_pinch_factorplane_trimtexture_sample_biastexture_overlay_alphaadd_col[3]sub_col[3]active_rndactive_cloneactive_mask*layerstypemap[32]totlayermaxlayertotsize*pool*externalrot[4]ave[3]*groundwander[3]rest_lengthparticle_index[2]delete_flagnumparentpa[4]w[4]fuv[4]foffsetprev_state*hair*boiddietimenum_dmcachehair_indexalivespring_kplasticity_constantyield_ratioplasticity_balanceyield_balanceviscosity_omegaviscosity_betastiffness_kstiffness_knearrest_densitybuoyancyspring_frames*boids*fluiddistrphystypeavemodereacteventdrawdraw_asdraw_sizechildtyperen_assubframesdraw_colren_stephair_stepkeys_stepadapt_angleadapt_pixrotfromintegratorbb_alignbb_uv_splitbb_animbb_split_offsetbb_tiltbb_rand_tiltbb_offset[2]bb_size[2]bb_vel_headbb_vel_tailcolor_vec_maxsimplify_refsizesimplify_ratesimplify_transitionsimplify_viewporttimetweakcourant_targetjitfaceff_hairgrid_randps_offset[1]grid_reseffector_amounttime_flagtime_pad[3]partfactanfactanphasereactfacob_vel[3]avefacphasefacrandrotfacrandphasefacrandsizeacc[3]dragfacbrownfacrandlengthchild_nbrren_child_nbrparentschildsizechildrandsizechildradchildflatclumppowkink_flatkink_amp_clumprough1rough1_sizerough2rough2_sizerough2_thresrough_endrough_end_shapeclengthclength_thresparting_facparting_minparting_maxbranch_thresdraw_line[2]path_startpath_endtrail_countkeyed_loopsdupliweights*eff_group*dup_ob*bb_ob*pd2*part*particles**pathcache**childcachepathcachebufschildcachebufs*clmd*hair_in_dm*hair_out_dm*target_ob*latticetree_framebvhtree_framechild_seedtotunexisttotchildtotcachedtotchildcachetarget_psystotkeyedbakespacebb_uvname[3][64]vgroup[12]vg_negrt3*renderdata*effectors*fluid_springstot_fluidspringsalloc_fluidsprings*tree*pdd*franddt_frac_padCdisCvistructuralbendingmax_bendmax_structmax_shearavg_spring_lentimescaleeff_force_scaleeff_wind_scalesim_time_oldvelocity_smoothcollider_frictionvel_dampingstepsPerFrameprerollmaxspringlensolver_typevgroup_bendvgroup_massvgroup_structshapekey_restpresetsreset*collision_listepsilonself_frictionselfepsilonrepel_forcedistance_repelself_loop_countloop_countpressurethicknessstrokesframenum*actframegstepinfo[128]sbuffer_sizesbuffer_sflag*sbufferlistprintlevelstorelevel*reporttimer*windrawable*winactivewindowsinitializedfile_savedop_undo_depthoperatorsqueuereportsjobspaintcursorsdragskeyconfigs*defaultconf*addonconf*userconftimers*autosavetimer*ghostwingrabcursor*screen*newscreenscreenname[64]posxposywindowstatemonitorlastcursormodalcursoraddmousemove*eventstate*curswin*tweakdrawmethoddrawfail*drawdatamodalhandlerssubwindowsgestureidname[64]propvalueshiftctrlaltoskeykeymodifiermaptype*ptr*remove_item*add_itemitemsdiff_itemsspaceidregionidkmi_id(*poll)()*modal_itemsbasename[64]actkeymap*customdata*py_instance*reportsmacro*opm*edatainfluence*coefficientsarraysizepoly_orderamplitudephase_multiplierphase_offsetvalue_offsetmidvalbefore_modeafter_modebefore_cyclesafter_cyclesrectphasemodificationstep_size*rna_pathpchan_name[32]transChanidtypetargets[8]num_targetsvariablesexpression[256]*expr_compvec[2]*fptarray_indexcolor_modecolor[3]from[128]to[128]mappingsstrips*remapfcurvesstrip_timeblendmodeextendmode*speaker_handlegroup[64]groupmodekeyingflagpathstypeinfo[64]active_path*tmpactnla_tracks*actstripdriversoverridesact_blendmodeact_extendmodeact_influenceruleoptionsfear_factorsignal_idlook_aheadoloc[3]queue_sizewanderflee_distancehealthstate_idrulesconditionsactionsruleset_typerule_fuzzinesslast_state_idlanding_smoothnessbankingaggressionair_min_speedair_max_speedair_max_accair_max_aveair_personal_spaceland_jump_speedland_max_speedland_max_accland_max_aveland_personal_spaceland_stick_forcestates*smd*fluid_group*coll_group*wt*tex_wt*tex_shadow*shadowp0[3]p1[3]dxomegatempAmbbetares[3]amplifymaxresviewsettingsnoisediss_percentdiss_speedres_wt[3]dx_wtv3dnumcache_compcache_high_comp*point_cache[2]ptcaches[2]border_collisionstime_scalevorticityvelocity[2]vel_multivgrp_heat_scale[2]vgroup_flowvgroup_densityvgroup_heat*points_old*velmat_old[4][4]volume_maxvolume_mindistance_maxdistance_referencecone_angle_outercone_angle_innercone_volume_outerrender_flagbuild_size_flagbuild_tc_flaglastsize[2]tracking*tracking_contextproxytrack_preview_height*track_previewtrack_pos[2]track_disabled*markerslide_scale[2]error*intrinsicssensor_widthpixel_aspectfocalunitsprincipal[2]k1k2k3pos[2]pat_min[2]pat_max[2]search_min[2]search_max[2]markersnrlast_marker*markersbundle_pos[3]pat_flagsearch_flagframes_limitpattern_matchtrackerpyramid_levelsminimum_correlationdefault_trackerdefault_pyramid_levelsdefault_minimum_correlationdefault_pattern_sizedefault_search_sizedefault_frames_limitdefault_margindefault_pattern_matchdefault_flagpodkeyframe1keyframe2refine_camera_intrinsicspad23clean_framesclean_actionclean_errorobject_distancetot_trackact_trackmaxscale*rot_tracklocinfscaleinfrotinf*scaleibuflast_cameracamnr*camerastracksreconstructionmessage[256]settingscamerastabilization*act_trackobjectsobjectnrtot_object*brush_groupcurrent_frameformatdisp_typeimage_fileformateffect_uipreview_idinit_color_typepad_simage_resolutionsubstepsinit_color[4]*init_textureinit_layername[64]dry_speedcolor_dry_thresholddepth_clampdisp_factorspread_speedcolor_spread_speedshrink_speeddrip_veldrip_accinfluence_scaleradius_scalewave_dampingwave_speedwave_timescalewave_springimage_output_path[1024]output_name[64]output_name2[64]*pmdsurfacesactive_surerror[64]collisionwetnessparticle_radiusparticle_smoothpaint_distance*paint_ramp*vel_rampproximity_falloffray_dirwave_factorwave_clampmax_velocitysmudge_strengthTYPE charucharshortushortintlongulongfloatdoubleint64_tuint64_tvoidLinkLinkDataListBasevec2svec2frctirctfIDPropertyDataIDPropertyIDLibraryFileDataPreviewImageIpoDriverObjectIpoCurveBPointBezTripleIpoKeyBlockKeyAnimDataTextLineTextMarkerTextPackedFileCameraImageUserSceneImageGPUTextureanimRenderResultMTexTexPluginTexCBDataColorBandEnvMapImBufPointDensityCurveMappingVoxelDataOceanTexbNodeTreeTexMappingColorMappingLampVolumeSettingsGameSettingsMaterialGroupVFontVFontDataMetaElemBoundBoxMetaBallNurbCharInfoTextBoxEditNurbGHashCurvePathSelBoxEditFontMeshMPolyMTexPolyMLoopMLoopUVMLoopColMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectEditMeshCustomDataMultiresMDeformWeightMFloatPropertyMIntPropertyMStringPropertyOrigSpaceFaceMDispsMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMRecastModifierDataMappingInfoModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataMaskModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataBevelModifierDataBMeshModifierDataSmokeModifierDataSmokeDomainSettingsSmokeFlowSettingsSmokeCollSettingsDisplaceModifierDataUVProjectModifierDataDecimateModifierDataSmoothModifierDataCastModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataClothModifierDataClothClothSimSettingsClothCollSettingsPointCacheCollisionModifierDataBVHTreeSurfaceModifierDataDerivedMeshBVHTreeFromMeshBooleanModifierDataMDefInfluenceMDefCellMeshDeformModifierDataParticleSystemModifierDataParticleSystemParticleInstanceModifierDataExplodeModifierDataMultiresModifierDataFluidsimModifierDataFluidsimSettingsShrinkwrapModifierDataSimpleDeformModifierDataShapeKeyModifierDataSolidifyModifierDataScrewModifierDataOceanModifierDataOceanOceanCacheWarpModifierDataWeightVGEditModifierDataWeightVGMixModifierDataWeightVGProximityModifierDataDynamicPaintModifierDataDynamicPaintCanvasSettingsDynamicPaintBrushSettingsRemeshModifierDataEditLattLatticebDeformGroupSculptSessionbActionbPosebGPdatabAnimVizSettingsbMotionPathBulletSoftBodyPartDeflectSoftBodyObHookDupliObjectRNGEffectorWeightsPTCacheExtraPTCacheMemPTCacheEditSBVertexBodyPointBodySpringSBScratchFluidVertexVelocityWorldBaseAviCodecDataQuicktimeCodecDataQuicktimeCodecSettingsFFMpegCodecDataAudioDataSceneRenderLayerImageFormatDataRenderDataRenderProfileGameDomeGameFramingRecastDataGameDataTimeMarkerPaintBrushImagePaintSettingsParticleBrushDataParticleEditSettingsSculptUvSculptVPaintTransformOrientationUnifiedPaintSettingsToolSettingsbStatsUnitSettingsPhysicsSettingsEditingSceneStatsDagForestMovieClipBGpicMovieClipUserRegionView3DRenderInfoRenderEngineViewDepthsSmoothViewStorewmTimerView3DSpaceLinkView2DSpaceInfoSpaceIpobDopeSheetSpaceButsSpaceSeqFileSelectParamsSpaceFileFileListwmOperatorFileLayoutSpaceOopsTreeStoreTreeStoreElemSpaceImageScopesHistogramSpaceNlaSpaceTextScriptSpaceScriptSpaceTimeCacheSpaceTimeSpaceNodeSpaceLogicConsoleLineSpaceConsoleSpaceUserPrefSpaceClipMovieClipScopesuiFontuiFontStyleuiStyleuiWidgetColorsuiWidgetStateColorsuiPanelColorsThemeUIThemeSpaceThemeWireColorbThemebAddonSolidLightUserDefbScreenScrVertScrEdgePanelPanelTypeuiLayoutScrAreaSpaceTypeARegionARegionTypeFileGlobalStripElemStripCropStripTransformStripColorBalanceStripProxyStripPluginSeqSequencebSoundMetaStackWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbActuatorSensorbDelaySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbArmatureSensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorSound3DbSoundActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorbTwoDFilterActuatorbParentActuatorbStateActuatorbArmatureActuatorbSteeringActuatorGroupObjectBonebArmaturebMotionPathVertbPoseChannelbIKParambItascbActionGroupSpaceActionbActionChannelbConstraintChannelbConstraintbConstraintTargetbPythonConstraintbKinematicConstraintbSplineIKConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbSizeLikeConstraintbSameVolumeConstraintbTransLikeConstraintbMinMaxConstraintbActionConstraintbLockTrackConstraintbDampTrackConstraintbFollowPathConstraintbStretchToConstraintbRigidBodyJointConstraintbClampToConstraintbChildOfConstraintbTransformConstraintbPivotConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbDistLimitConstraintbShrinkwrapConstraintbFollowTrackConstraintbCameraSolverConstraintbObjectSolverConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodePreviewbNodeuiBlockbNodeTypebNodeTreeExecbNodeSocketValueIntbNodeSocketValueFloatbNodeSocketValueBooleanbNodeSocketValueVectorbNodeSocketValueRGBANodeImageAnimNodeBlurDataNodeDBlurDataNodeBilateralBlurDataNodeHueSatNodeImageFileNodeChromaNodeTwoXYsNodeTwoFloatsNodeGeometryNodeVertexColNodeDefocusNodeScriptDictNodeGlareNodeTonemapNodeLensDistNodeColorBalanceNodeColorspillNodeTexBaseNodeTexSkyNodeTexImageNodeTexCheckerNodeTexEnvironmentNodeTexGradientNodeTexNoiseNodeTexVoronoiNodeTexMusgraveNodeTexWaveNodeTexMagicNodeShaderAttributeTexNodeOutputCurveMapPointCurveMapBrushCloneCustomDataLayerCustomDataExternalHairKeyParticleKeyBoidParticleBoidDataParticleSpringChildParticleParticleTargetParticleDupliWeightParticleDataSPHFluidSettingsParticleSettingsBoidSettingsParticleCacheKeyKDTreeParticleDrawDataLinkNodebGPDspointbGPDstrokebGPDframebGPDlayerReportListwmWindowManagerwmWindowwmKeyConfigwmEventwmSubWindowwmGesturewmKeyMapItemPointerRNAwmKeyMapDiffItemwmKeyMapwmOperatorTypeFModifierFMod_GeneratorFMod_FunctionGeneratorFCM_EnvelopeDataFMod_EnvelopeFMod_CyclesFMod_PythonFMod_LimitsFMod_NoiseFMod_SteppedDriverTargetDriverVarChannelDriverFPointFCurveAnimMapPairAnimMapperNlaStripNlaTrackKS_PathKeyingSetAnimOverrideIdAdtTemplateBoidRuleBoidRuleGoalAvoidBoidRuleAvoidCollisionBoidRuleFollowLeaderBoidRuleAverageSpeedBoidRuleFightBoidStateFLUID_3DWTURBULENCESpeakerMovieClipProxyMovieClipCacheMovieTrackingMovieTrackingTrackMovieTrackingMarkerMovieReconstructedCameraMovieTrackingCameraMovieTrackingSettingsMovieTrackingStabilizationMovieTrackingReconstructionMovieTrackingObjectMovieTrackingStatsDynamicPaintSurfacePaintSurfaceDataTLEN ldx \$88( $@ 0dT0L8X|lTh8 ,< T @ (`pplhht0h$@`|( xl4xthh`| LLpXXp 0Px0xD` @D h 88T,$X$p 8lTX(0`<x p( 4hX, 0p#H88&@`(, 4  x8TPLHLHlp\L\ DplXX (0(h `,h\TLLLDd`LLT` |TT <, ( ,@  `@@ ,d84@<`hhh0DX`h0D8\@8`H,@0lSTRC                 !"#$%&'()*+,-./012,-34567  89:;<=>,?@A;-BC DEFG !HIJK;LMNOP"""QRS# ##TUVW XYZ$[X\]"^"_`abcde fg%hi &!HjklmnopqrstuMvwx'(yz{|}~)!"*+,,%-A.x7/"   0A>1$>02)3lm4     1 56 7.@!H !"#$%&'()*+,-./0123456789:;<=>~{|}?@W'A8BM)/C1 2D4E6F7GHx9 IJKLM+: 1NOPQR;J!HSTUVWXYZ[\]^_5`lmabcdefghijklmnopqrstuWvwxyz{|}~M-H8B<=W>~!H<=SvH11-8BM?   @"A%BBBC  D!HC M>IJ !B" #$%5&'()*+,$%(+EEE-+./01234567/089:F;-G<=H>I?@ZJD!HC AHBCDEMKF G>HIJIJKLMNOPQ01RST U]AVWXYZ[\]^_`aLbMcd@e@f@g@hijklGmnoFpFqN/!HC M G>OrPsQtRuSvTwUxVyWzX{Y|Z}[~N\]^^^^^4IJI_V ST-X`%Y`WZO-QP)SRS[\ U)SabcdeZfgfh-ij jjhgi4W_W^^kl llS(yml.nlX  olplqlUrlESs lXtlulXv lXwlxlyz{| l.} l)X~lllhl.OWl l    ll(y  lWWWWWWTlWW l!"%|#l$S%&'4()*+,-#./012 3l45677l+789l:;<l=>?@XlA lBCDEFGHI lJDKLSMl l|NOPQRST lUVWXYZl[\]^_`abcdefghijklmnhol.pq5`rlst5uvwxyz.{|}~lxyz.{|}~lxyz.{|}~llS@Z!H./M GY|ExC!H%MC  S>IJjj E?@   %K       +  K ( !"#$%&'()*+,-./012.34?5678  9:; < =>?@ABCDE: F7GHIJKL M,NOPQRSTUVWXYZ[\]^_`abcdefghi6:jklmnopqrstuvwxyz{|}~}O4NNM4N!HTvSM-H8B        !"#$%&'()W*+,-./01X23456 789:;P ><?=>?@A BCDEFGHIJKxjLMNOP }QRSTUVWXYZ[\]^_`abcihdefghCBiDjkSlmWnopqrstuvwxyz{|}~$ WSZ$WW ]^_`bSW9 XW h? 7(yX$Y hU?      !"#$%&'()*+,-./0123456789W:;<=>?@ABC4DEFGH7(.!HI(JKLMNOPQRSH8BTUVWbX Y Z [ \ ]^_`abcdef  g)'Afh^_hij)klmnopqrsZtuvwxyzR{|}j~C3sZ}jRnN $>xS F ^_j)'A5^_ $X            X ! "XW #$ %&'NW(^_)*+8B8,-./R0 1Q2345678 9 ^_:;<f Sj=>Z?@A   BCDE  DFGHIJKLMN O P Q RSTUVWXYZ[\ ]^_`abcdefghijklimnopqrstuvwxyz{|}~wam     ,] !"#$%&'()3*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_1`abcdefgh(y(ijWklmnopqrstuv wxyz{|u}~ {|2o2 }!!!ZnsR"} #j(B$% &'(+D)))7$(%&'* "     +0++  U})M(y+*C+++, P ---+ +.Z/012 X 333 7444 7}5-55 z  V O      @                 6 ?777 O   'C! 888 " 9Z# $ :W;>% Z<& ' ( ) * =+ , >?- . @/ 0 SAZB- C1 2 SW3 D4 5 E6 7 8 FFF9 : ; < W G= +> ? H @ A B C D E F IG J$ SGGGGH I < 9 J  K= FK  L M L+MN  VO P Q R S T U NV W X Y Z [ \ ] O ^ WP,N_ o` P +Na b c d e QW(yR+ +S 9 f g Rh i j k T  VO WoU+l m WV Sn o p q r s W  VR>t u Xv w x y z 1 Y{ | 7 } W8 Z V~  [\Z  $]+^_4 5 %B ` 2 Z    B K KKKH 9   +,"% % MP V W  X aaa+ ?  bbb b%         Z%       c!H   b              dd                  e(ee   b e%e    e I            I  Wj      f g  F          hhh      b    ?   i  S jjjh MlkkkM lll     M  m mm    n$    o       %  SZp     q   Xr  s  t  uPv w   | W x  UVl m N y  z { |N! | " # $ % }  & ' ( ) * + , - . W~  /   0 1 2 3 4 5 6 7  8   9 :   9 :   9 :  ZcSBZFH; f< = > ff= /  ?  @ +SA B MN UVC D E F P G H I  ,l m J K L M N O P  Q R WS T U V W  X Y Z [ \ ] ^ _ %` > a V  I b %' Q S T Oc d e f g h i j k l m n o p q r s t u 8!Hv w x y d z I b { | } ~  l m l m R l m  {}    B(   i       Z X   X  "L}    Z                         DXZ h     & |                9 : K  K KK K KK K K K  :       5 >                S               ) " 5 - 3   i h W                  |    Z B^        %   G 7     ! " # $ 7+S. + 7% &  ' O(  ) # $ h* + ,  - . / 0 1 2 3 4 5 6 7 !H8 9 70 : v; < = > ? @ A B C D E F G H I  J K L M N O P Q R S T U V W X Y Z  V [ \ ] ^ _ `   a b c d    e f g h i j k l m hn o p q r s t u v w x y z 0./{ | } ~                 -? ?   ME 4   L M      %                         & w  G Y      x   yuv    X                X  ?      {   Y w                         m        2                                  2  } ! "  # $ % R   & ' }P G ( ) * S+ , - . l m ()4/ l m 0 1 2 3 $" 4 h5 6 7 |  '8 9 : ; < = ;> ? @ ;' A h <0B 4;C 8 D E F G BH I N J K ' L UVC D P G M N W O I   'P ; Q 8 C R S T R U 8 C ! V J W X Y Z [ \ ] !H^ +_ ` a  ^ _ b ^ +Ic   _ d ^ e > 7^  f g o h Si j k l m a  P_ n o p g q  r s t u v w x y z { | } y(x~ 9 ? ? ?  ** *      l     X             z x~ 4l      X{ x~    K  !H,        Ph z D  " +      3   z  z K     W     z            E                    Z            3                  V 0   ?         X     .                        X  4>X   ! " 1# 1$ %  & ' ( ) * ENDBconfclerk-0.6.0/src/icons/collapse.svg0000664000175000017500000001211612156157674017223 0ustar gregoagregoa image/svg+xml confclerk-0.6.0/src/icons/today.png0000644000175000017500000000331512156157674016525 0ustar gregoagregoaPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<JIDATXWmlSU~νX{{{G;c\DF01 #QI4c0  1BC@؀t0]:0Mޜ{y{=̶mF)ۃ[188ȗfL!{J+7q64m,H$IW;B!lڼ!+|<uu#\N]z0lllwPpqgn-|Rdw7ǹsgQ5 ضc[w>FM7b\ǔ)RgFP\\$an"P<|NΛNq `GBgW'ڮs}~#x< cJH2w`kV._%UͫvW= c{%%Ę&ݣ#@h~#WzZ8@ӭ!4*r d3C_|(LOOx553FZ[3^m|2sX6+1aw o+;w`kӖZdxaQ\lm?/BU5< %\פVp"gAu8])4_L+m:y 衮)29\x1Sppg5ߖykpe5&T4ehxO]#Ӎjr"U4^YAUBtrނ"-d$4l~In"h'D4Ieܳr.ڈ1_mPB[QɹBgWǥe$v83LZּC5™Y.k(?^B;_E`U/UjVtRYONE6 J]ӑN\jP|&K3\nkL<2(rj΁UU12]bBɢQY C&Zw\[GnCERaƨ (ۉHZX0t:" +VG7V?`r gz$%LJ )Kʧ}|L?% `jcv,D Dg_У2$mU;@~́+1Rcl.U8SPe&n04,*zԌk[qsꡖ1K20LP (\c`@G1^{߾c[QM  K2^Ddo隅I|twM4la[t[A=1sqʅOIENDB`confclerk-0.6.0/src/icons/alarm-off.png0000664000175000017500000000251012156157674017247 0ustar gregoagregoaPNG  IHDR szz pHYsgRIDATXŗkhWoM5Fj:7c ѱS,8n d dCE7de_l>(2TA^g5i.i4}>46^<'i).W$v|$D"E\|YB!!B6e KӾ{͡@Z/c #tWF++?'n@ ~=p@lbbNjQqXp< !B5#cMC|^Kt8/^ Yӌ~EQ6Ymmm",P:MX`aŒE#RrM&Sn}}=t@1AQ`0H__$z)**h4NlvB!m2] !P0hk! aEAVc4tNvnhjj~ An$?{6;v~lVF6dwn[xƃ2M׽?e` cZ`zR0L[Α:`ShS\\r:'Kf+`ZP4h&% 7ehr2D6 188hd#ho2<wssz3VLVRkӃgt o |sz<-'vt3:PJձciS[[G2|Vf6@Ygx5+xwVX.ob.™3ޞH:^իen̟?Fe=jD"VF\lh61Z5**+/cSfg"!1|u+Gy`9Ν0b<'`]{{ l8Nj/`p&:T#>UOTg IDATX{LSwu8Kl.sόmٲ?4,1Kf*m*8e`E>ҢrQ<йրt>łŶBT^r;?[R),'9s~weL/BJ@E啲r@0UT*dy |if47 i!;'K0ޞ\>b\B~Q^ϓ'O{(:[,<qivN&#PQq~ɴAkAzhhh584F%eأ[ ?#ܪfNcquN2DԶߛ|P]c꬯o ]OO7~!uTUUM!eouP'Nf5~׺puw$/R,LݤnS3Zp.%Ek l6*rKRȱwgthTIT& `9gzP+:\u6'y +ͯlV1u}8t,\OXo?s,֞{n.܅. Kb颠1: w @n%Y]`'.l+qM8H$c]{SkuZe} V~+h@u{#n#vG3K@jjm)[ &':O9ns )w4D֮_k" b?. P|Z~ڌPx:D/脔inhV-0v/x2&fRv\qv)allUV.G.7d侺дBUddΐ ʓ ~5٫WP?˄3 oʼn_6C S f3X48Ōo%?  W\~1+0J4Y9w .v!w@Yp2- YAhZEVu溂Jf˯jxOEl+@U4~{+ osGIENDB`confclerk-0.6.0/src/icons/expand.png0000664000175000017500000000073012156157674016664 0ustar gregoagregoaPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<UIDATX=j@# 9@. 0VPBDV>B*UZ_! 8"VIȎFڙ}FT1a۹ cǁGa뷆)Q Ee6nö,!\VͦQ/CT8;㴿C^1F|q\c@Gͽ"Z^ Ӯ@ݙ{UFȂ:,1Z,h 0>_hJ:ՙVBZWƦQ1@T$I:7`۶"XLYnYp\=hfY+pu.a񠺇Idk yTڐ` ૮` w} IENDB`confclerk-0.6.0/src/icons/favourite.blend0000664000175000017500000150615012156157674017721 0ustar gregoagregoaBLENDER_v262REND SceneTESTH``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?̿@```š4~3z1˿@?445```853|2y1w0c@˿@?f@}334455```:753{2x0u/t/{2|2~344555```?975~3{2w0u/s.r.˿@?x1y1{2}2344555```E >965~3z1w0t.r.q-b@dAv0x0z1|2~3445555```KD >964}2y1v0s.q.o-n,ʿ@?t/u/w0y1{2}33445555```רJD =864|2y1u/r.p-n-m,`@ʿ@?c@s.t/v/x0z1|2~3445555š```ݭSJC =754{2w0t/q-o-m,l+k+r.s.s.u/w0y1{2}33445555š```\!RIC <753z1v0s.p-n,l,k+j*_@ʿ@?b@q-r.s.t/v/x0z1|2~34455556```e*\!QHB <75}3y1u/r.o-m,k+j+i*h*q.q-q-r.s.u/w0y1{2}334455556```ee*Z PHA ;64|2w0s/q-n,l+j+i*h*g)_@ɿ@?b@p-p-q-q-s.t/v/x0z1|2~34455555h?```n3d)ZOG@ :54{2v0r.p-m,k+j*i*g*f)e)p.p-p-p-q-r.s.u/w0y1{2}334455555š```@v:n2c)YNF? 95}3y1u/q.o-m,k+i*h*g)f)e(d(ɿ@?p.p-p-p-p-p-q-s.t/w0y1{2|2~344455556̾A```z>u9m2c(XLE >84{2w1s/q-n-l,j+h*g)f)e(d(d(^@ɿ@?b@o-p-p-p-p-p-p-r.t/v/x0z1|2}3444455556```z>t9l1a'VIC =7~3z1u0r.p-n,l+j+h*f)e)e(d(c(c(o-o,o-p-p-p-p-p-q.s.u/w0z1|2}3344444556```~Bz>t9k1`%RFA <6|2x1t/q.o-m,k+i*g)f)e)e(d(c(c'b'ɿ@?n-n,o,o-o-p-p-p-p-q-s.u/w0y1{2}2~3444445556```F~By>s8j/\!ND ?:5z2w0s/q-n,l,j+h*g)f)e(d(d(c(c'c'c(^@a@l+l,m,n,o,o-p-p-p-p-q-r.t/v0x1z1|2~33444445556```JF~By=s7f+XKB <7~3y1v0r.p-n,l+j*h*g)e)e(d(c(c'c'c(c(c(d(e)f)g)h*i*j+k+l+m,m,n,n,o-p-p-q-q.r.s.u/x0z1|2}234444445556```ĥJF~Bx=p5b'UH?:5|2x0u/r.o-m,k+i*h*g)e)d(d(c(c(c(d(d(d)e)f)g)h*i*j+k+l+m,m,n,n,o-p-q-q.r.s.u/w0y1{1}2~33444445555```@KJF}Bw;l1^$QE <84{2w0t/q-n,l+j*i*h)g)e)d(d(d(d(d(d(e)f)g)h*h*i+j+k+l+m,m,n,n,o-p-q.r.r.t/v0x0z1|2~334444445555̾A```LKIG|Au9i.[!NB :63z1v/s.p-m,l+j*i*h)f)e(d(d(d(d(d(e)f)g)h*i*i+j+k+l+m,m,n,o-p-q.r.r.t/v/x0z1|2~2344444455555```yLKJF{@q6e*XK@ 95~3y0u/r.o-m+k+j*i*g)f)e(e(e(e(e(e)f)g*h*i*j+k+k+l+m,m,n-o-p-q.r.t/u/x0y1{2}2344444445555gA```ŦMLKIEy=n2a&TH=84|2x0t/q-o,m+k+j*h*g)f)f)e(e(e(f)g)g*h*i*j+k+l+l,m,n,o-p-q.r.t/u/w0y1z1|2~3344444445555```@NMKJGCv;j/^$RF;64{1v/s.q-n,l+k+i*h*g)f)f)f)f(f)g)h*h*i*j+k+l+m,n,o-p-q-r.s.u/w0x0z1|2~33444444455555˿A```OMLKIF~Bs7f+[!OC :63z1u/s.p-n,l+j+i*h*g)g)g)g)g)h)h*i*j+k+l+m,m,n,o-p-q.s.u/v/x0z1{2}334444444455555```zNMLJGDz>o3c(XL@ 85~3y0u/r.p-n,l+j*i*h*h*g)g)h)h*i*j+j+k+l+m,n,o-p-q-r.t/v/x0y1{2}2~33444444455555gA```ĦMMMLIF~Bv;k0_$TI>74}2w0t/r.o-n,l+j+i*i*h*h)h*i*i*j+k+l+m,n,o,p-q-r.t.u/w0y0{1|2~334444444445555```@LLLLJGD{@r7g,\!QF;64{1w0t.q-o-m,l+k+j*i*i*i*i*j*k+l+l+m,n,o-q-r.s.u/w/x0z1{2}3~334444444444555˾A```LLKKKIF~Cw64{2x0u/r.q-p-n,m,l+l+m,m,m,m,n,o-q-r.t.u/v/x0y1{1|2~3333443333333444```FGHGGE~C|Ax>r7j/a&YPF;63{2x0u/s.q-p-n,m,m,n,n,n,n,o-p-q.s.t/v/w0y0z1|2}3~3333333333333334```|A}BCEFD}B{@x>s9m3e*\"UMC 95~3z1w0u/s.q-p-n,o,o,n,n,o-p-q-r.s.u/w/x0y1{1}2}3~333333333333~3~3~3~3```w=x=y>z@|A}B|Az@x>t:o4h.`&XRJ@ 74}3z1x0v/t/r.p-p-p-o-o-p-q-r.s.t/v/w0y0z1|2}2~3~33333333~3~3~3}2}2}3}3}2```s8s9t9u:v64|2z1x1v0t/r.q-q-q-p-q-r.s.t/u/w0x0z1{2|2}2~3~3333~3~3~3~2}2}2}2|2|2|2{2{2```m3n4o5o5p6r8r8r8r8r8o5j0e+_$XQKD;54}3{2y1v0t/s.r.r.r.s.s.t/u/v0x0y1z1|2|2}2}2~2~3~3~2}2}2}2}2|2|2{2{2{2z1z1z1```Ⱄd+f-h.i0k1l3l3m3m3m3j1f,b(^$Z TNGA 954}3{2x1u/t/t/t/s.t.u/v/v/x0y0z1|2|2|2|2}2}2~2}2}2|2|2|2|2{2{1z1z1y1y1y1x0```۬Z"]%_'a)c*e-g.g.h.h.f-b(^$[!YTOIC =754|3z1w0v0v0u/u/u/v/w/x0y0z1{2|2|2|2|2|2|2}2|2|2|2{1{1z1z1y1y1x0x0w0w0v0```ԧPTWY![#]%`(a)b)b)b)_%\#Z WTNIC >8653|2y1x0w0w0v0v0w0x0y0z1{1|2|2|2|2|2{1|1|2|1{1{1z1z1y1y1x0w0v0v/v/u/t/```GHJMPRUX Z#[#\$]$\#["XVRMHB > :764~3|2y1y1x1x0x0y1z1z1{1|2}2|2|2|2|2{1{1{1{1z1z1y1x0x0w0w0v/u/u/t.s.r.q.```ʠB CEFHJMPSUVVVUTSQMHD@ <8664~3|2{2{1z1z1{1|2|2|2}3}2|2|2|2{1{1{1z1y1y0x0x0w0w0v/u/t/s.s.r.q-p-o-```<= ? @ B CEGHJMPPOONOONJFB >:86643}3}2|2|2}2}2}2}3}3}2|2|2{2{1{1z1y0y0x0w0w0v/u/t/t.r.r-q-p-o,n,m,l+```iD89;< > @ A CDEGIJJKLMNLJHD @ <97654433~333~3~3~3~3~3|2{1z1z1y1y0x0w0v/v/u/t.s.r.q-p-o,n,m,l+k+j*_@```hC67789:<= ? @ B DFHIJKKLJHFD B >;87654444444333~3|2{2z1y1y0x0w0w0v/u/s.r.q-p-o,n,m,l+k+j+i*i*h*^@```gB45667889;<> ? A CFHHIJJIHGFD @ <:87655554444443}2|2{1z1y0x0w0w0v/u/s.q.p-o-m,l,k+j+j*i*h*h*g)f)^@```?}3~445667889:;= > A DFGHIKJIIHFC ><97766655554443}2|2|2{1{1y0w0w0v/t/r.p-n-m,l,l+k+j+i*h*g*g)f)e)d)ɿ@```{2{2|3}3~44567889:;= ? A DFFIKKKJIHE A=:98877666555433~2~2}2|2y1w0w0u/s.r.p.n-m,l,k+j+i*h*g)f)f)e)d(d(c(```fAz2{2{2|2|3}3~3456789:<= ? @ B DFHKMLLJIGC ?<:9888777665544333|2z1x0v0u/t/s/q.o-m,l+k+j+i*h*g)f)e)e)d(d(c(c(^@```eAz2z2{2{2|2|3}3~4445678:<> ? A B DFHKMMLKJIF B=;:999887776655443~2}2|2y1v0u/t/r.p-n-l,k+j+i*i*h*g)f)e)d(d(c(c(b(]@```eAy1y2z2{2{2{2}3~44555679;=> @ A C FHJKMNNMMLH D ?<;::9988887766544433|2z1w0u0s/q.p-n,m,k+j*i*i*h)g)f)e(d(d(c(c(b']@```?y1x1y1y2z2z2{2|3~44556679:;=? @ C EHJLMOPPQPNJF B><;;::999988776655543}2z1x0v0t/r.q-o-m,l+j*j*i*h)f)e(d(d(c(c(b'b'b(ȾA```?y2y1y2y2z2z2{2|3~44556789;<=> @ B E GJLNPPQRRSPLH D?=<;;;:::9999887766654~3|2z1x0v/u/s.q-o,n+l+j*i*h)g)f)e(d(d(d(c(c(c(ɾA```fAz2z2z2z2z2{2|3}3~4456689:;=>@ B C E GILNPQRRSSSQNK F A?=<<;;;:::::999887765433}2{1y0w/u.s.q-p,n+l+j*h*g)g)f)e)e(d(d(c(d(^@```fAz2z2{2{2{2|3~44555678:;<>? A C E GIKMNPRRSSTUSQOLH C@>==<<;;;;;;:::99988765543~2|1z0x0u/s.q-o,n,l+j*h*h)g)f)e)e)e(d(d(^@```?{3z2{2{2|2|3~34566689:;<=? @ B D FHJLNOPQRSTUUUSRPMI EB@>=<<;;;;;;;;;::999998765543~2|1z1w0u/s.q-o-m,k+j*i*h*g)g)f)f)e(e)ɾA```?|3|3|3|3|3~34567789:;<>?@ B C E GIKMNOOOPQRSTUVUSQNK FC@>>=<;;<<<<<<;;;::::::998766543~2|2y1w0u/s.q-o,m,l+k*j*i*h*h*g)h*ɾA```gB~3}3}3}3~3456788:;<=?@ A C D E G HJLMMMNNNOPQRSTVUTROL H CA?>=<<<<<<<<<<<<<<<<;;;;:998776544~3|2y1w0u/s.q-o,m+l+k+k+j+j*j+`@```gB~3~344556789;<=?@ A C D E G H IJJKKL L L L L L M OPQRTVUTRPMI EA?>==<<<==============<<<;;:998876554~3|2y1w0u/s.q-o,n,n,m+l+k+a@```?hB44556789:<=>@ A B D E F G H IJK J J J J J J J J J K L M OPQSUUTRPNJ FB@?>=<<======>>>>>>>>>>====<<;::98876654~3|2y1w0u/s.r.q-p-o,n,b@ʿ@```?5556789:;=>?A B C D E F G H I JJ I I I H HHHIIIIJ K M N PQSUVTRQOL GC@?>==<===>>>>>>>>>>>>>>>>>>>==<;;:99876543~3|2z1x0w/v/t.t.s.r.ʾA```?66679:;<=?@B C D D E F G I I J I I H HHGGGGGHHHHJK M N QSTUVUTSQM H DA?>>=====>>>>>??????????????>>>==<<;::9876543~2}2{1z1y0x0w/v0˾A```Ɲ6789:<=>@AC D E E D F G H I I I H HGGGFFFFFFGGGHJK L N RTUVWWWURNI EA@?>>====>>>>>?????????????????>>>==<<;:9987654433~2|2{1{2```Ü88:;<=?ABD E F E E E F H I I H HGGFFFFEEEEEFFFGHIKL P SVWXXYYWSOK GC@??>>===>>>????@@@@@@@@@@@@@?????>>>=<<;;:988766554433~```?::;=>?AC D F G F F F F G H HGGFFFFEEEEDDDDEEEFGHJKM QTWXYYZ\XTPL H D@>>>====>>>???@@@@@@@@@@@@@@@@@@????>>==<;;:99887766555̾A```?;<=?@AC D F G G G G G G GGGFFFEEEDDDDDDDDDEEEFHIJL O RVXZ[]^]ZVRNJ D@>===<===>>???@@@@AAAAAAAAAAAA@@@@@????>>==<<;;::9988777̾A```nE>?@ACD F G G G G G GGFFFFEEEEDDDDDDDDDDEEEFGHJKN QTX\^`a b!_\XTPK D@>=<<<<==>>>??@@@AAAAAAAAAAAAAAAA@@@@@@???>>>==<<;;::998j?```@ABC D E F G G G GGFFFFEEEEEDDDDDDDDDDDDEEEGHIJM P SW[`b!d#f%c#` ]ZVQK E@>=<;<<<==>>??@@@AAAAABBBBBBBBBAAAAAA@@@@@@???>>>==<<;;::```rFC D E F F F FFFFFFEEEEDDDDDDDDDDDDDDDEEEFGHIK O RVZ`d#f&h(h(e%b"_[XRL E@>=<;;<<<==>???@@AAAABBBBBBBBBBBBBBAAAAAAA@@@@@???>>>==<l?```ТѢF F FFFFFEEEEDDDDDDDDDDDDDDDDDEEEFGHIJN QUY^d"g'j*l,k,h)e&b#^XRLE@>=<;;;<<==>>???@@AAAABBBBBBBBBBBBBAAAAAAAAAA@@@@@????̝̞```ӢӢӡӡӡEDDDDDDDDDDDDDDDDDDDEEEFGHHIM PTX\b!h'k+m-o/n/l,i)e&`!YSMF@>=<;;;;<<=>>????@@AAAABBBBBBBBBBBBBBBBBBAAAAAAϟϟϟϟϟ```п@ӡӡӡӡӡӡӡDEEEEFGGHIL O SV[af%l+o/p0q2q2o0l-h)b#ZSMF@>=<;;;;;<==>>???@@@AAABBBBBBBџҠҠҠѠѠѠϾA```п@բuBGHKN RVZ`f$j*p/r2s3t5t4s4o0j+c$[TNF@>=<;;;;;<<=>>>??@@@AAAp@ѠϾA```@zHQUX_e$j)o/s3u5v6w8v7v6q2k,d%\TNG @>=<;:;;;;<=>>>??@@@pAξA```@тP]c"j)o/t4v6x8y:z;y:w8s4l-e&]UNG A>=;;::;;;<<=>>>??oAοA```ۊYh'o.t4v7y9z;|=}>{=;;:::;;;<==>>?nB```bt3w7y:{<}>@@|=x9u6o0h)_ VOG @>=;;:::;;;<<=>>nB```jz:|<~>@BA}>y:u6p1i*`!WOG @>=;;::::;;;<==nC```}>?ACEB}>z;v7r3j+a"WOG@>=;;::::;;;<<=```BDFEC~?z;w8s4k,b#XNGA><;::::::;;;<ȝ```FGGFEA|=x9t5l-b#XNFA><;::::::;;;;```äHGFEC}>y:u6l-b#XNFA><;:::::::;;Ɯ```IHGFD@{<;::99:::kB```@IHEBy:s4l-c$YNFB=<;::999::ͿA```wGEBz;r3k,c$YNGB=<::9999:kB```äFDB{<:99999:Ŝ```FCA|=s5k,c$YOGC><:999999```C~@{=t6l.c%ZOFC><:99999ś```@C~@{=u7l.c$ZPGC><:99999̿A```B}@{=u7l.b$ZPFB?;:99999```|?yx:t6k-a#WPG A?<::999```mw9r4j,a"VOG A><::99jA```u8q3j,`"VNG @=<::99ś```t7p2i+`"UMF ?=<;:99```︚n1h*_!TKE?><;:9ƛ```@m0g)^!TJ E@><;:9̾A```bf(^ TKE@><;:j@```굖e(^ TKF A>=;:Ɯ```e(^ UKF A>=;:```汓^ UKG B>=;Ȝ~```^!ULF B>=<```ӅXULF B?=l?```ULF C?=```AMF B?ͽB```yKF Bo@```AϿA``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````GLOB( 0 >X[ /home/stefan/Projekte/toastfreeware/confclerk/src/icons/favourite.blendWM -VWMWinMan٠٠٠٠h " h " " ؘؘؘDATA٠#  >screeny wW77ƤP&xNQ74SNv6=SRAnimation.001s7PZ81kX[DATASDATAS@XaDATA@XSvaDATA4V@XvDATA4V]FDATA]Y4VvFDATAY ^],DATA ^#Y,FDATA#S ^,DATAS`2S#vDATA`2S¨SDATA¨X_T`2S,DATAX_TX¨DATAX mYX_TFDATA mY~SXDATA~Sh~ mYDATAh~s7~S,dDATAs7h~vdDATAP]S@XDATA](6PS4VDATA(6Y]@X]DATAYP(64V]DATAPжYYDATAж砭PYDATA砭bSж] ^DATAbSX]S砭Y#DATAX]S-RbSSDATA-RRX]SS#DATARS-R`2SDATASǥR ^¨DATAǥīSY¨DATAī ǥ`2S¨DATA _Sī`2SX_TDATA_SY X_T¨DATAYh]_S4VXDATAh]VY ^XDATAVxfVh]X_TXDATAxfV@n4V`2S mYDATA@n4x]xfV~SX_TDATAx]8 ^@n4~S mYDATA8 ^H]x]h~#DATAH]vW8 ^ ^h~DATAvW茫H]s7]DATA茫h]vWs7SDATAh]茫s7h~DATAZh]4V mYDATAZ~SXDATA`81Z4VS@X]vGawnnKW⤭DATAKW⤭ DADAvDADA??  wwvG`wDATA⤭KWmEmEpoo?? paaDATA`ZxI81Y#S-vJpIpI`OV^DATA`OV^CACAICACA??  JJ-vJDATAV^`OCVC9J>8?@ J9-vJ0IIDATA@0IIBUTTONS_PT_contextBUTTONS_PT_contextContext9$DATA@II0IRENDER_PT_renderRENDER_PT_renderRender9=DATA@IIIRENDER_PT_layersRENDER_PT_layersLayerso9DATA@IIIRENDER_PT_dimensionsRENDER_PT_dimensionsDimensions9DATA@I`IIRENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing:9:DATA@`IIIRENDER_PT_motion_blurRENDER_PT_motion_blurFull Sample Motion Blur"9DATA@I@I`IRENDER_PT_shadingRENDER_PT_shadingShading9fDATA@@IIIRENDER_PT_outputRENDER_PT_outputOutput 9DATA@I I@IRENDER_PT_performanceRENDER_PT_performancePerformance9DATA@ IIIRENDER_PT_post_processingRENDER_PT_post_processingPost Processing9 DATA@II IRENDER_PT_stampRENDER_PT_stampStamp9 DATA@IIRENDER_PT_bakeRENDER_PT_bakeBake9 DATApIDATA`xI8IZ`2S¨Y+,XIXII0IDATAI0IDADA+DADA??  ,,+,DATA0II@~CHBpF}CHB++i?HB|HHB= AH,j+,jDATAXIDATA`8I=xI#h~s7S-vcJN1N1IIDATAIICACAIBCABCA??  JJ-vJcJDATAIICC9Jl88l??Jm9[-vIJmDATAN1ϧDATA ϧX^DATAX^X[X[X[X[h^^^^^X[DATA`=_8IX_TX ^¨+Eh^h^UYDATAU@VuDAbDADADA??  +DATA@VhWUC@FCF++?@ ,EDATAhWX@VCfCww?@ xf+"DATAXYhW#C`#C`?@ ++EDATAYX+EZDATAXZkR?? JLD>3;Q?Fwi?JF>#,TY!e?*=>o?E>Fwi?TY5;JF>!e?Q?#,+=>`DAoy@?Y>0QQA?X>?>#,>& uϜz?T*= lAoA0> O?@fK5>}Q?h3kuQA(ˆy>rB^B@D>3;Q?Fwi?JF>#,TY!e?*=>o?Y>0QQA?X>?>#,>& uϜz?T*= lAoAc @c @c @?\>7?8˔oAoA+;?! BUBt~BDATAh^333?? AL>^ B?=C DATA`_pf=`2S mY~SX_Tdd@`cDATA@`hadDA(DAgDAgDA??  DATAhab@`HCpHC[?? DATAbchaDATAcbC@zC Ao:o:|HPCGiDATAdeDATA`e#X[DATA`pfk_ mY4VX~SE xjxjgPiDATAg(hjDA(DAgDAgDA??  DATA(hPig7CHC@#??EDATAPi(h hD hD@#|H@F #<HBJEDATA xj$ X[DATA`kpfh~ ^]s7-veEJ==XlmDATAXlmfDAC@AICACA?? JJ-veeDATAmXl-veEJ0=DATAX0= @BP@AHMݕ/?U~'?3F:?>T8165e?2>Z& 4?ߕ/?7F:?81W~>85e?'?T2>ne@>M@??"1''?|&??T?ļ*w:@l2R@朿11A 4AF>>Ο;ǽ=ߌ>3x‘B ֟&BŭeA(@ݕ/?U~'?3F:?>T8165e?2>Z& 4??"1''?|&??T?ļ*w:@l2R@朿11A 4AH?N,Z# A3;??DATA=333?? AL>^ B? #<C SN= >v6SRCompositingg.001U4== =`V1X[DATAUPQDATAPQ(2RUDATA(2Rx1PQDATAx1(2RDATAhϨx1DATAhϨȕDATAȕHQhϨ\\DATAHQnȕ\DATAn؂YHQ\DATA؂YnDATA]؂Y\DATA] DATA 4]DATA4 \DATA=8=PQ(2RDATA8===PQDATA==8=(2RhϨDATA===hϨDATA=X==HQx1DATAX===HQȕDATA==X=nhϨDATA=0==nDATA0=x==nȕDATAx==0=HQhϨDATA==x=؂YDATA=P==nDATAP===؂YDATA==P=؂Y]DATA=(==]DATA(=p==U DATAp==(=4 DATA==p=4x1DATA=H==4ȕDATAH===] DATA==H=4DATA==U؂YDATA` =>PQ(2RhϨX^X^=>DATA=>DADADADA?? DATA>=mEmEpoo?? pDATA`>> =4ȕHQx1][2\>>>>DATA>>sDACDA1DADA?? 22]2DATA>>@~CHB23JуCHB11A?HB|HHB= AH2B][2BDATA>?DATA`>>ȕnhϨHQ]]2xxP>x>DATAP>x>CACA1CACA?? 22]2DATAx>P>C\C\!2rR r?@ 2s!s]]2s>DATA@> >BUTTONS_PT_contextBUTTONS_PT_contextContext $DATA@ > >>RENDER_PT_renderRENDER_PT_renderRender =DATA@ >  >RENDER_PT_layersRENDER_PT_layersLayerso DATA@  >RENDER_PT_dimensionsRENDER_PT_dimensionsDimensions DATA@ h RENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing: :DATA@h  RENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blurlur" DATA@Hh RENDER_PT_shadingRENDER_PT_shadingShading fDATA@HRENDER_PT_outputRENDER_PT_outputOutput DATA@(HRENDER_PT_performanceRENDER_PT_performancePerformance DATA@(RENDER_PT_post_processingRENDER_PT_post_processingPost Processing  DATA@(RENDER_PT_stampRENDER_PT_stampStamp  DATA@RENDER_PT_bakeRENDER_PT_bakeBake  DATAxDATA`#> ]4[`"`"DATA8WDA7-DADADA?? [DATA8`C@FCF++?@ ,rDATA`8CfCww?@ xf"DATA`#Cl#C?@ p[[DATA[rDATAX>B?A????r@????r=@@?>B?°sG#q?67@u?гGf=43<????1?>B?°R0A??0oA?;\>7?8˔?DATA`"333?? AL>^ B?=C DATA`#`V1؂Yn[\]0U10U18$T1DATA8$T1BDADA[DADA?? \\[\DATAT18$ D D)hDDK\BJJB??FFQ= @ \CK1[\CDATA0U1 @X[z?\C[qC[DATA``V1#U؂Y] )6)6V1@Y1DATAV1X1CA)DA?DA?DA?? DATAX1@Y1V1DATA@Y1X1CCR?d?rrDATA )6dA>d>ddd?SN >N6=SRDefault0Y5^xTK6K6H+^X[0[DATA0Y\DATA\`w80YDATA`w8%T\DATA%TȆY`w8DATAȆY`P%TDATA`P ȆYDATA A1`PDATAA1P DATAP5^A1DATA5^PDATAxT'S`w8\DATA'SP}xTȆY\DATAP}DATA@202P2TEXTURE_PT_marbleTEXTURE_PT_marbleMarble=DATA@0222TEXTURE_PT_magicTEXTURE_PT_magicMagic$<DATA@2202TEXTURE_PT_distortednoiseTEXTURE_PT_distortednoiseDistorted Noisel;DATA@222TEXTURE_PT_blendTEXTURE_PT_blendBlend=:DATA@222TEXTURE_PT_stucciTEXTURE_PT_stucciStucci9DATA@2`22DATA_PT_modifiersDATA_PT_modifiersModifiersvA6DATA@`222DATA_PT_context_meshDATA_PT_context_meshv$.DATA@2@2`2DATA_PT_custom_props_meshDATA_PT_custom_props_meshCustom Propertiesv/DATA@@222DATA_PT_normalsDATA_PT_normalsNormalsNv:0DATA@2 2@2DATA_PT_settingsDATA_PT_settingsSettingsv=1DATA@ 222DATA_PT_vertex_groupsDATA_PT_vertex_groupsVertex GroupsvL2DATA@22 2DATA_PT_shape_keysDATA_PT_shape_keysShape Keys1vL3DATA@2p22DATA_PT_uv_textureDATA_PT_uv_textureUV TexturevE4DATA@p222DATA_PT_vertex_colorsDATA_PT_vertex_colorsVertex ColorswvE5DATA@2P2p2  MATERIAL_PT_context_materialMATERIAL_PT_context_material^~"DATA@P222Ш MATERIAL_PT_previewMATERIAL_PT_previewPreview#DATA@202P20 MATERIAL_PT_diffuseMATERIAL_PT_diffuseDiffuseg?$DATA@0222 MATERIAL_PT_specularMATERIAL_PT_specularSpecularS%DATA@2202 MATERIAL_PT_shadingMATERIAL_PT_shadingShadingP&DATA@222@ MATERIAL_PT_transpMATERIAL_PT_transpTransparency)S'DATA@222 MATERIAL_PT_mirrorMATERIAL_PT_mirrorMirrorf(DATA@2`22 MATERIAL_PT_sssMATERIAL_PT_sssSubsurface Scattering:)DATA@`2дU2  MATERIAL_PT_strandMATERIAL_PT_strandStrandA*DATA@дU@U`2 MATERIAL_PT_optionsMATERIAL_PT_optionsOptions+DATA@@UUдU MATERIAL_PT_shadowMATERIAL_PT_shadowShadowO,DATA@U U@U MATERIAL_PT_custom_propsMATERIAL_PT_custom_propsCustom Properties-DATA@ UUUOBJECT_PT_context_objectOBJECT_PT_context_objectv$DATA@UU UOBJECT_PT_transformOBJECT_PT_transformTransform'vyDATA@UpUUOBJECT_PT_delta_transformOBJECT_PT_delta_transformDelta TransformvDATA@pUUUOBJECT_PT_transform_locksOBJECT_PT_transform_locksTransform LocksvDATA@UPUpUOBJECT_PT_relationsOBJECT_PT_relationsRelations}vbDATA@PUUUOBJECT_PT_groupsOBJECT_PT_groupsGroupsAv$DATA@U0UPUOBJECT_PT_displayOBJECT_PT_displayDisplayvDATA@0UUUOBJECT_PT_duplicationOBJECT_PT_duplicationDuplicationZv$DATA@UU0UOBJECT_PT_animationOBJECT_PT_animationAnimation HacksBvDATA@UUUOBJECT_PT_motion_pathsOBJECT_PT_motion_pathsMotion Paths*v DATA@UUUOBJECT_PT_custom_propsOBJECT_PT_custom_propsCustom Propertiesv!DATA@U`UUDATA_PT_context_lampDATA_PT_context_lamp$DATA@`UUUDATA_PT_previewDATA_PT_previewPreviewDATA@U@U`UDATA_PT_lampDATA_PT_lampLampDATA@@UUUDATA_PT_shadowDATA_PT_shadowShadow$DATA@U U@UDATA_PT_custom_props_lampDATA_PT_custom_props_lampCustom PropertiesDATA@ UUUDATA_PT_sunskyDATA_PT_sunskySky & Atmosphere&CDATA@UU UDATA_PT_context_cameraDATA_PT_context_camera$ DATA@UpUUDATA_PT_cameraDATA_PT_cameraCameraV DATA@pUUUDATA_PT_camera_displayDATA_PT_camera_displayDisplay|DATA@UPUpUDATA_PT_custom_props_cameraDATA_PT_custom_props_cameraCustom PropertiesDATA@PUUUWORLD_PT_context_worldWORLD_PT_context_worldq$DATA@U0UPUWORLD_PT_previewWORLD_PT_previewPreviewqDATA@0UUUWORLD_PT_worldWORLD_PT_worldWorldqjDATA@U0UWORLD_PT_ambient_occlusionWORLD_PT_ambient_occlusionAmbient OcclusionZq$DATA@UWORLD_PT_environment_lightingWORLD_PT_environment_lightingEnvironment LightingBq$DATA@WORLD_PT_indirect_lightingWORLD_PT_indirect_lightingIndirect Lightingq=DATA@𐪭WORLD_PT_gatherWORLD_PT_gatherGatherqDATA@𐪭`WORLD_PT_mistWORLD_PT_mistMist{qDATA@`Г𐪭WORLD_PT_starsWORLD_PT_starsStarscq DATA@Г@`WORLD_PT_custom_propsWORLD_PT_custom_propsCustom PropertiesKq DATA@@ГDATA_PT_lensDATA_PT_lensLens  DATA@@DATA_PT_camera_dofDATA_PT_camera_dofDepth of FieldF=DATA QDATA`(H+^f1PA1`P5^. ( 02^DATACA'7CA-CACA?? ...p s]s]`Л]DATAC}7Ct.?? .. UUw]DATAse SculptDATA  I ^FDATAl{^FI X[X[X[X[h^^^^^X[X[X[X[X[X[X[X[X[X[X[ X[ X[ X[ X[ X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[ X[!X["X[#X[$X[%X[&X['X[(X[)X[*X[+X[,X[-X[.X[/X[0X[X[X[X[X[X[X[X[X[X[X[ X[ X[ X[ X[ X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[X[ X[!X["X[#X[$X[%X[&X['X[(X[@SG\GdGlGtGx|GpGhG`GXGPGHG@G8G0G(G GGy;x;p;h;`;X;P;H;@;8;0;(;@SG@SG@SG@SG@SG@SG@SG@SG@SG @SG @SG @SG @SG @SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG@SG @SG!@SG"@SG#@SG$@SG%@SG&@SG'@SG(@SG)@SG*@SG+@SG,@SG-@SG.@SG/@SG0@SG1@SG2@SG3@SG4@SG5@SG6@SG7@SG8@SG9@SG:@SG;@SG<@SG=@SG>@SG?@SG@@SGA@SGB@SGC@SGD@SGE@SG^^^^v6= >N6h3hL3[ -Vh^\G\G\G\G\G\G\G\G\G \G \G \G \G \G\G\G\G\G\G\G\G\G\G\G\G\G\G\G\G\G\G\G \G!\G"\G#\G$\G%\G&\G'\G(\G)\G*\G+\G,\G-\G.\G/\G0\G1\G2\G3\G4\G5\G6\G7\G8\G9\G:\G;\G<\G=\G>\G?\G@\GA\GB\GC\GD\GE\GdGdGdGdGdGdGdGdGdG dG dG dG dG dGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdG dG!dG"dG#dG$dG%dG&dG'dG(dG)dG*dG+dG,dG-dG.dG/dG0dG1dG2dG3dG4dG5dG6dG7dG8dG9dG:dG;dG<dG=dG>dG?dG@dGAdGBdGCdGDdGEdGlGlGlGlGlGlGlGlGlG lG lG lG lG lGlGlGlGlGlGlGlGlGlGlGlGlGlGlGlGlGlGlG lG!lG"lG#lG$lG%lG&lG'lG(lG)lG*lG+lG,lG-lG.lG/lG0lG1lG2lG3lG4lG5lG6lG7lG8lG9lG:lG;lG<lG=lG>lG?lG@lGAlGBlGClGDlGElGtGtGtGtGtGtGtGtGtG tG tG tG tG tGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtG tG!tG"tG#tG$tG%tG&tG'tG(tG)tG*tG+tG,tG-tG.tG/tG0tG1tG2tG3tG4tG5tG6tG7tG8tG9tG:tG;tG<tG=tG>tG?tG@tGAtGBtGCtGDtGEtGx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|G x|G x|G x|G x|G x|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|Gx|G x|G!x|G"x|G#x|G$x|G%x|G&x|G'x|G(x|G)x|G*x|G+x|G,x|G-x|G.x|G/x|G0x|G1x|G2x|G3x|G4x|G5x|G6x|G7x|G8x|G9x|G:x|G;x|G<x|G=x|G>x|G?x|G@x|GAx|GBx|GCx|GDx|GEx|GpGpGpGpGpGpGpGpGpG pG pG pG pG pGpGpGpGpGpGpGpGpGpGpGpGpGpGpGpGpGpGpG pG!pG"pG#pG$pG%pG&pG'pG(pG)pG*pG+pG,pG-pG.pG/pG0pG1pG2pG3pG4pG5pG6pG7pG8pG9pG:pG;pG<pG=pG>pG?pG@pGApGBpGCpGDpGEpGhGhGhGhGhGhGhGhGhG hG hG hG hG hGhGhGhGhGhGhGhGhGhGhGhGhGhGhGhGhGhGhG hG!hG"hG#hG$hG%hG&hG'hG(hG)hG*hG+hG,hG-hG.hG/hG0hG1hG2hG3hG4hG5hG6hG7hG8hG9hG:hG;hG<hG=hG>hG?hG@hGAhGBhGChGDhGEhG`G`G`G`G`G`G`G`G`G `G `G `G `G `G`G`G`G`G`G`G`G`G`G`G`G`G`G`G`G`G`G`G `G!`G"`G#`G$`G%`G&`G'`G(`G)`G*`G+`G,`G-`G.`G/`G0`G1`G2`G3`G4`G5`G6`G7`G8`G9`G:`G;`G<`G=`G>`G?`G@`GA`GB`GC`GD`GE`GXGXGXGXGXGXGXGXGXG XG XG XG XG XGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXG XG!XG"XG#XG$XG%XG&XG'XG(XG)XG*XG+XG,XG-XG.XG/XG0XG1XG2XG3XG4XG5XG6XG7XG8XG9XG:XG;XG<XG=XG>XG?XG@XGAXGBXGCXGDXGEXGPGPGPGPGPGPGPGPGPG PG PG PG PG PGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPG PG!PG"PG#PG$PG%PG&PG'PG(PG)PG*PG+PG,PG-PG.PG/PG0PG1PG2PG3PG4PG5PG6PG7PG8PG9PG:PG;PG<PG=PG>PG?PG@PGAPGBPGCPGDPGEPGHGHGHGHGHGHGHGHGHG HG HG HG HG HGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHG HG!HG"HG#HG$HG%HG&HG'HG(HG)HG*HG+HG,HG-HG.HG/HG0HG1HG2HG3HG4HG5HG6HG7HG8HG9HG:HG;HG<HG=HG>HG?HG@HGAHGBHGCHGDHGEHG@G@G@G@G@G@G@G@G@G @G @G @G @G @G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G @G!@G"@G#@G$@G%@G&@G'@G(@G)@G*@G+@G,@G-@G.@G/@G0@G1@G2@G3@G4@G5@G6@G7@G8@G9@G:@G;@G<@G=@G>@G?@G@@GA@GB@GC@GD@GE@G8G8G8G8G8G8G8G8G8G 8G 8G 8G 8G 8G8G8G8G8G8G8G8G8G8G8G8G8G8G8G8G8G8G8G 8G!8G"8G#8G$8G%8G&8G'8G(8G)8G*8G+8G,8G-8G.8G/8G08G18G28G38G48G58G68G78G88G98G:8G;8G<8G=8G>8G?8G@8GA8GB8GC8GD8GE8G0G0G0G0G0G0G0G0G0G 0G 0G 0G 0G 0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G 0G!0G"0G#0G$0G%0G&0G'0G(0G)0G*0G+0G,0G-0G.0G/0G00G10G20G30G40G50G60G70G80G90G:0G;0G<0G=0G>0G?0G@0GA0GB0GC0GD0GE0G(G(G(G(G(G(G(G(G(G (G (G (G (G (G(G(G(G(G(G(G(G(G(G(G(G(G(G(G(G(G(G(G (G!(G"(G#(G$(G%(G&(G'(G((G)(G*(G+(G,(G-(G.(G/(G0(G1(G2(G3(G4(G5(G6(G7(G8(G9(G:(G;(G<(G=(G>(G?(G@(GA(GB(GC(GD(GE(G G G G G G G G G G  G  G  G  G  G G G G G G G G G G G G G G G G G G G  G! G" G# G$ G% G& G' G( G) G* G+ G, G- G. G/ G0 G1 G2 G3 G4 G5 G6 G7 G8 G9 G: G; G< G= G> G? G@ GA GB GC GD GE GGGGGGGGGG G G G G GGGGGGGGGGGGGGGGGGG G!G"G#G$G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4G5G6G7G8G9G:G;G<G=G>G?G@GAGBGCGDGEGy;y;y;y;y;y;y;y;y; y; y; y; y; y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y; y;!y;"y;#y;$y;%y;&y;'y;(y;)y;*y;+y;,y;-y;.y;/y;0y;1y;2y;3y;4y;5y;6y;7y;8y;9y;:y;;y;<y;=y;>y;?y;@y;Ay;By;Cy;Dy;Ey;x;x;x;x;x;x;x;x;x; x; x; x; x; x;x;x;x;x;x;x;x;x;x;x;x;x;x;x;x;x;x;x; x;!x;"x;#x;$x;%x;&x;'x;(x;)x;*x;+x;,x;-x;.x;/x;0x;1x;2x;3x;4x;5x;6x;7x;8x;9x;:x;;x;<x;=x;>x;?x;@x;Ax;Bx;Cx;Dx;Ex;p;p;p;p;p;p;p;p;p; p; p; p; p; p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p; p;!p;"p;#p;$p;%p;&p;'p;(p;)p;*p;+p;,p;-p;.p;/p;0p;1p;2p;3p;4p;5p;6p;7p;8p;9p;:p;;p;<p;=p;>p;?p;@p;Ap;Bp;Cp;Dp;Ep;h;h;h;h;h;h;h;h;h; h; h; h; h; h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h; h;!h;"h;#h;$h;%h;&h;'h;(h;)h;*h;+h;,h;-h;.h;/h;0h;1h;2h;3h;4h;5h;6h;7h;8h;9h;:h;;h;<h;=h;>h;?h;@h;Ah;Bh;Ch;Dh;Eh;`;`;`;`;`;`;`;`;`; `; `; `; `; `;`;`;`;`;`;`;`;`;`;`;`;`;`;`;`;`;`;`; `;!`;"`;#`;$`;%`;&`;'`;(`;)`;*`;+`;,`;-`;.`;/`;0`;1`;2`;3`;4`;5`;6`;7`;8`;9`;:`;;`;<`;=`;>`;?`;@`;A`;B`;C`;D`;E`;X;X;X;X;X;X;X;X;X; X; X; X; X; X;X;X;X;X;X;X;X;X;X;X;X;X;X;X;X;X;X;X; X;!X;"X;#X;$X;%X;&X;'X;(X;)X;*X;+X;,X;-X;.X;/X;0X;1X;2X;3X;4X;5X;6X;7X;8X;9X;:X;;X;<X;=X;>X;?X;@X;AX;BX;CX;DX;EX;P;P;P;P;P;P;P;P;P; P; P; P; P; P;P;P;P;P;P;P;P;P;P;P;P;P;P;P;P;P;P;P; P;!P;"P;#P;$P;%P;&P;'P;(P;)P;*P;+P;,P;-P;.P;/P;0P;1P;2P;3P;4P;5P;6P;7P;8P;9P;:P;;P;<P;=P;>P;?P;@P;AP;BP;CP;DP;EP;H;H;H;H;H;H;H;H;H; H; H; H; H; H;H;H;H;H;H;H;H;H;H;H;H;H;H;H;H;H;H;H; H;!H;"H;#H;$H;%H;&H;'H;(H;)H;*H;+H;,H;-H;.H;/H;0H;1H;2H;3H;4H;5H;6H;7H;8H;9H;:H;;H;<H;=H;>H;?H;@H;AH;BH;CH;DH;EH;@;@;@;@;@;@;@;@;@; @; @; @; @; @;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@; @;!@;"@;#@;$@;%@;&@;'@;(@;)@;*@;+@;,@;-@;.@;/@;0@;1@;2@;3@;4@;5@;6@;7@;8@;9@;:@;;@;<@;=@;>@;?@;@@;A@;B@;C@;D@;E@;8;8;8;8;8;8;8;8;8; 8; 8; 8; 8; 8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8; 8;!8;"8;#8;$8;%8;&8;'8;(8;)8;*8;+8;,8;-8;.8;/8;08;18;28;38;48;58;68;78;88;98;:8;;8;<8;=8;>8;?8;@8;A8;B8;C8;D8;E8;0;0;0;0;0;0;0;0;0; 0; 0; 0; 0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;!0;"0;#0;$0;%0;&0;'0;(0;)0;*0;+0;,0;-0;.0;/0;00;10;20;30;40;50;60;70;80;90;:0;;0;<0;=0;>0;?0;@0;A0;B0;C0;D0;E0;(;(;(;(;(;(;(;(;(; (; (; (; (; (;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(; (;!(;"(;#(;$(;%(;&(;'(;((;)(;*(;+(;,(;-(;.(;/(;0(;1(;2(;3(;4(;5(;6(;7(;8(;9(;:(;;(;<(;=(;>(;?(;@(;A(;B(;C(;D(;E(;^^^^^^^^^ ^ ^ ^ ^ ^^^^^^^^^^^^^^^^^^^^^^ ^ ^ ^ ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ ^ ^ ^ ^^^^^^^^^^^^^^^^^^^ ^!^"^#^$^%^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9^:^;^<^=^>^?^@^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_^`^^^^^^^^^^ ^ ^ ^ ^ ^^^^^^^^^^^^^^^^^^^ ^!^"^#^$^%^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9^:^;^<^=^>^?^@^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_^`^v6v6v6v6v6v6v6v6v6 v6========= = > > > > > > > > >  >N6N6N6N6N6N6N6N6N6 N6h3h3h3h3h3h3h3h3h3 h3hL3hL3hL3hL3hL3hL3hL3hL3hL3 hL3[[[[[[[[[ [ -V -V -V -V -V -V -V -V -V  -V  -Vh^h^h^h^h^h^h^h^h^ h^ h^ h^ h^ h^h^h^h^h^h^h^h^^ FG ^ ^ ^ ^^^ ^ ^ ^ ^ FG^h^ X[X[ X[X[ X[X[X[X[X[X[X[X[ X[ X[X[X[h^x;G^UDATA`H+^(0YȆYA1  =A7U=X.DATAU(fDAtDAsDAsDA?? P ZZp8TDATA(PU CC?@ 2 P೪DATA@PVIEW3D_PT_tools_objectmodeVIEW3D_PT_tools_objectmodeObject ToolsDATA@0PVIEW3D_PT_tools_brushVIEW3D_PT_tools_brushBrushDATA@0VIEW3D_PT_tools_brush_textureVIEW3D_PT_tools_brush_textureTextureXDATA@0VIEW3D_PT_tools_brush_strokeVIEW3D_PT_tools_brush_strokeStrokeByDATA@VIEW3D_PT_tools_brush_curveVIEW3D_PT_tools_brush_curveCurveDATA@𦪭VIEW3D_PT_tools_brush_appearanceVIEW3D_PT_tools_brush_appearanceAppearance`DATA@𦪭`VIEW3D_PT_tools_brush_toolVIEW3D_PT_tools_brush_toolTool7$ DATA@`Щ𦪭VIEW3D_PT_sculpt_symmetryVIEW3D_PT_sculpt_symmetrySymmetry4DATA@Щ@`VIEW3D_PT_sculpt_optionsVIEW3D_PT_sculpt_optionsOptionsDATA@@ЩVIEW3D_PT_tools_weightpaintVIEW3D_PT_tools_weightpaintWeight Tools'|DATA@ @VIEW3D_PT_tools_weightpaint_optionsVIEW3D_PT_tools_weightpaint_optionsOptionsDATA@ VIEW3D_PT_tools_projectpaintVIEW3D_PT_tools_projectpaintProject Paint DATA@ VIEW3D_PT_tools_vertexpaintVIEW3D_PT_tools_vertexpaintOptionsDATA@pVIEW3D_PT_imagepaint_optionsVIEW3D_PT_imagepaint_optionsOptionsPDATA@p೪VIEW3D_PT_tools_mesheditVIEW3D_PT_tools_mesheditMesh ToolsDATA@೪pVIEW3D_PT_tools_meshedit_optionsVIEW3D_PT_tools_meshedit_optionsMesh Options@tDATAP跪(!CZfCZ?@ " xxDATA@xVIEW3D_PT_last_operatorVIEW3D_PT_last_operatorMove to Layerrd MoveBDATA跪=PCq#C0?@   衭h Z9RPQDATA@= VIEW3D_PT_objectVIEW3D_PT_objectTransform|l&DATA@=`= VIEW3D_PT_gpencilVIEW3D_PT_gpencilGrease PencilPDATA@`=Ф==$ VIEW3D_PT_view3d_propertiesVIEW3D_PT_view3d_propertiesViewDATA@Ф=@=`= ( VIEW3D_PT_view3d_nameVIEW3D_PT_view3d_nameItem^$DATA@@==Ф=) VIEW3D_PT_view3d_displayVIEW3D_PT_view3d_displayDisplayC?DATA@= =@=3 VIEW3D_PT_background_imageVIEW3D_PT_background_imageBackground ImagesRDATA@ ===P8 VIEW3D_PT_transform_orientationsVIEW3D_PT_transform_orientationsTransform Orientations: DATA@= =VIEW3D_PT_view3d_meshdisplayVIEW3D_PT_view3d_meshdisplayMesh DisplayhDATA@9R=p& VIEW3D_PT_view3d_cursorVIEW3D_PT_view3d_cursor3D Cursor`DATA@9R. VIEW3D_PT_view3d_motion_trackingVIEW3D_PT_view3d_motion_trackingMotion TrackingjDATA=跪! 8 :](=DATAX(=q >t>o?e?1Z;͸_?`eG3[be<?e1ZeM,?f?_I32Z;?[be<͸`e?3? >:GR4~s>87%y2;%Gҧ?\*@ O,`57=L@=hH=@3?e?1Z;͸_?`eG3[be<?5=s?@? >:GR4~s>87%y2;%3q<Ļ??????oc廷7^e;+@?g<?oBkA_BDATA= 7333?? AL>^ B?=zDL= DATA= =@IDAtDAsDAsDA?? @ DATA =H== DATAH=p= = DATAp=H=BBpxA@"@?A0 DATA 7A7==p=^X[dA>d>dddPA?DATAH=7p>7@PDADADADA?? P DATAp>7?7H=7C0_C0?@ p =iQDATA?7@7p>7@DDpBDHB1DDlBDDlB?? 222 DATA@7?77C#D?? DATA<A7 7H=7@7XYh^DATAXYSave As Image/home/stefan/Projekte/toastfreeware/confclerk/src/icons/favourite-off.png 0SNN6h3 >SRGame Logic.001SKYO6F7G70 3X[DATASǣDATAǣp SDATAp 8ǣDATA8Q1p DATAQ1hP8dDATAhP SQ1dDATA S\hPDATA\^ S DATA^(W\ DATA(Wh8^DATAh8F](W@DATAF] ]h8@dDATA ]KYF]DDATAKY ]DdDATAO6P6p ǣDATAP6+^O6Q1ǣDATA+^ ,^P6hPp DATA ,^PB7+^Q1hPDATAPB7B7 ,^Q1 SDATAB7B7PB7 S\DATAB7(C7B7^8DATA(C7pC7B7\^DATApC7C7(C7 SSDATAC7D7pC7S^DATAD7HD7C7hP(WDATAHD7D7D7(W8DATAD7D7HD7(W\DATAD7 E7D7h8F]DATA E7hE7D7hPF]DATAhE7E7 E7h8(WDATAE7E7hE7 S ]DATAE7@F7E7h8 ]DATA@F7F7E7Q1KYDATAF7F7@F7KYF]DATAF7F7KY ]DATA`G7I7Q1ǣp hPe33G7H7DATAG7H7DA DADADA??  e~DATAH7G7mED@poo?? pDATA`I7`=G7^\(W8!`X=X=J7K7DATAJ7K7CACA_CACA??  ``!`DATAK7J7CVCO`NN?@ `O!`hZ1=DATA@hZ1[1BUTTONS_PT_contextBUTTONS_PT_contextContextN$DATA@[1H]1hZ1RENDER_PT_renderRENDER_PT_renderRenderN=DATA@H]1^1[1RENDER_PT_layersRENDER_PT_layersLayersoNDATA@^1(`1H]1RENDER_PT_dimensionsRENDER_PT_dimensionsDimensionsNDATA@(`1a1^1RENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing:N:DATA@a1c1(`1RENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blurlur"NDATA@c1xd1a1RENDER_PT_shadingRENDER_PT_shadingShadingNfDATA@xd1=c1RENDER_PT_outputRENDER_PT_outputOutput NDATA@==xd1RENDER_PT_performanceRENDER_PT_performancePerformanceNDATA@=x==RENDER_PT_post_processingRENDER_PT_post_processingPost ProcessingN DATA@x===RENDER_PT_stampRENDER_PT_stampStampN DATA@=x=RENDER_PT_bakeRENDER_PT_bakeBakeN DATAX=DATA``=8=I7S S\^ ====DATA==JCADA?DA?DA??    DATA===\CKC?@ @=@=DATA@@=LOGIC_PT_propertiesLOGIC_PT_propertiesProperties$DATA==DpCPDC3D22??FF?H? D3DDATA4=DATA`8=L7`=h8F]hP(WAc @====DATA==CADA?CACA??  @@A@DATA==CCDv?D? #<zD @@Ac@DATA= DATA`L70 38= ]KYF]h8E?c 3 3=83DATA==@bDA~DADADA??  E?DATA= ==C@FCF++?@ ,EEcDATA =2=CfCww?@ xfE?"DATA283 =4Cm#Cmã?@ ??c(23DATA@(22VIEW3D_PT_objectVIEW3D_PT_objectTransformznDATA@22(2VIEW3D_PT_gpencilVIEW3D_PT_gpencilGrease PencilPDATA@2x32VIEW3D_PT_view3d_propertiesVIEW3D_PT_view3d_propertiesView&DATA@x332VIEW3D_PT_view3d_nameVIEW3D_PT_view3d_nameItem$DATA@3X3x3VIEW3D_PT_view3d_displayVIEW3D_PT_view3d_displayDisplayDATA@X333VIEW3D_PT_background_imageVIEW3D_PT_background_imageBackground ImageshDATA@3X3VIEW3D_PT_transform_orientationsVIEW3D_PT_transform_orientationsTransform OrientationsPDATA832E?c`3DATAX`3#=Eu=o?????????#=Eu=o?5A A?????#=Eu=o??5AoA9P=\>7?8˔?DATA 3333?? AL>^ B?=zD DATA`0 3L7 SQ1KY ]CcD33 3 3DATA 3 3CACACSCASCA??  DDCDDATA 3 3CC3D22?? D3CcDDATA3DATA 03DATA03X[X[X[X[h^^^^^X[SNh3hL3N6SRScriptingg.001(@3333F3X[DATA(@8QDATA8Q ^(@DATA ^iZ8QDATAiZe> ^DATAe>iZDATA6e>DATA6n1DATAn1X36DATAX33n1DATA33X3DATA333DATA3X33DDATAX333DDATA3X3DATA3 38Q ^DATA 3h33e>8QDATAh33 3 ^DATA33h3e>DATA3@336DATA@333n1iZDATA33@3X3(@DATA333X3e>DATA3`3336DATA`333n13DATA33`3X33DATA383333DATA8333n13DATA338336DATA333X3DATA3X33X3iZDATAX3333X3DATA33X33e>DATA303336DATA03x3333DATAx3303X33DATA3x3n1(@DATA`33e>8Q ^lhM7hM733DATA33DA DADADA??  gDATA33D0ADBpQooQ?? RpRfRDATA`3233n13X3iZCD1313x33DATAx33CACACACA??  %CDATA3x3CVC?I$~~$?@ %%$%3/3DATA@38!3BUTTONS_PT_contextBUTTONS_PT_contextContext~$DATA@8!3"33RENDER_PT_renderRENDER_PT_renderRender~=DATA@"3$38!3RENDER_PT_layersRENDER_PT_layersLayerso~DATA@$3%3"3RENDER_PT_dimensionsRENDER_PT_dimensionsDimensions~DATA@%3&3$3RENDER_PT_antialiasingRENDER_PT_antialiasingAnti-Aliasing:~:DATA@&3h(3%3RENDER_PT_motion_blurRENDER_PT_motion_blurSampled Motion Blurlur"~DATA@h(3)3&3RENDER_PT_shadingRENDER_PT_shadingShading~fDATA@)3H+3h(3RENDER_PT_outputRENDER_PT_outputOutput ~DATA@H+3,3)3RENDER_PT_performanceRENDER_PT_performancePerformance~DATA@,3(.3H+3RENDER_PT_post_processingRENDER_PT_post_processingPost Processing~ DATA@(.3/3,3RENDER_PT_stampRENDER_PT_stampStamp~ DATA@/3(.3RENDER_PT_bakeRENDER_PT_bakeBake~ DATA13DATA`238=333363;3;323@73DATA2333@bDA=DADADA??  DATA334323C@FCF++?@ ,iDATA436333CfCww?@ xf"DATA63@7343#C#Cyy?@ zhDATA@7363ih83DATAXh83?m8?PףD>3;Q?Fwi?JF>#,TY!e?*=>o?E>Fwi?TY5;JF>!e?Q?#,+=>`DAoy@?>e` ޠQQuZ?e> .>#,>m%??*=`oAoA>6uU?F pݘ]>3M*? 6hąC% ÈG6DWѦCGBD>3;Q?Fwi?JF>#,TY!e?*=>o?>e` ޠQQuZ?e> .>#,>m%??*=`oAoA\>7?8˔oAoAk;?DATA;3333?? AL>^ B? #<C DATA`8=3A323(@X33n1`@3`@3=3>3DATA=3>3CADADADA??  DATA>3=3=DOCDCuu?? vvvDATA@38DATA8DATAh`@3@3@3>>> python**DATA`A3F38=336X3ED3D3B3C3DATAB3C3CACACACA??  E^DATAC3B3CC#~~?? _DATAD3XDATA XE3DATAE3X[X[X[X[h^^^^^X[DATA`F3A3X3e>33 I3I3`G3H3DATA`G3H3CA>DADADA??  DATAH3`G3DDD)dDq,1CCh #<zD iiiDATAI3 =z||SNhL3[h3SRUV EditingXM3O3XO3(R3pR3Z3X[DATAXM3M3DATAM3M3XM3aDATAM3N3M3vaDATAN3XN3M3vDATAXN3N3N3FDATAN3N3XN3vFDATAN3O3N3FDATAO3N3DATAXO3O3M3M3DATAO3O3XO3M3XN3DATAO30P3O3M3N3DATA0P3xP3O3XN3N3DATAxP3P30P3XN3N3DATAP3Q3xP3XM3O3DATAQ3PQ3P3XM3XN3DATAPQ3Q3Q3N3O3DATAQ3Q3PQ3N3N3DATAQ3(R3Q3N3O3DATA(R3Q3N3N3DATA`pR3PU3XN3M3M3N3vGaw`[`[S3(T3DATAS3(T3 DADAvDADA??  wwvG`wDATA(T3S3mEmEpoo?? paaDATA`PU3Z3pR3XM3XN3N3O3EF[[U3Y3DATAU3W3CAqDA)DA)DA??  DATAW3Y3U3[C`JC++?@ ,,E,0X30X3DATA@0X3IMAGE_PT_gpencilIMAGE_PT_gpencilGrease Pencil:DATAY3W3CC)? @,E,DATA [dA>d>ddd?DATA`Z3PU3O3N3N3N3vEF[[X[3b3DATAX[3\3fDAlDADADA??  vDATA\3_3X[3 CmCm?@ dE]3]3DATA@]3VIEW3D_PT_tools_objectmodeVIEW3D_PT_tools_objectmodeObject Tools*DATA_3a3\3!CfC[Zww?@ xxdx"@`3@`3DATA@@`3VIEW3D_PT_last_operatorVIEW3D_PT_last_operatorOperatorDATAa3b3_3#C~#C~  ?@  vvEDATAb3a3evE,d3DATAXd3:?? JLD>3;Q?Fwi?JF>#,TY!e?*=>_?E>Fwi?TY4;JF>!e?Q?#,+=>6@_???0QQ{?X>?>#,>~Μz?T*=dbR@_@aB>?<`K5>}Q?sMd@JWA.Xj@-@D>3;Q?Fwi?JF>#,TY!e?*=>_??0QQ{?X>?>#,>~Μz?T*=dbR@_@\>7?8˔_@_@j:?DATA[333?? AL>^ B?=C SN[hL3SRVideo Editing[p[[x[[[X[DATA[[DATA[0[[aDATA0[p[[vaDATAp[[0[vDATA[[p[FDATA[0[[vFDATA0[p[[vDATAp[[0[dDATA[[p[LFDATA[0[[DATA0[p[[LDATAp[0[vdDATA[[[0[DATA[@[[[[DATA@[[[0[[DATA[е[@[[[DATAе[[[[0[DATA[`[е[[p[DATA`[[[[[DATA[[`[p[[DATA[8[[[0[DATA8[[[[0[DATA[ȷ[8[0[p[DATAȷ[[[p[p[DATA[X[ȷ[p[p[DATAX[[[[p[DATA[[X[[[DATA[0[[0[0[DATA0[x[[[[DATAx[0[0[[DATA`[[[[0[[vGaw[[P[x[DATAP[x[ DADAvDADA??  wwvG`wDATAx[P[mEmEpoo?? paaDATA`[`[[[p[p[p[vcwd[[0[X[DATA0[X[DADAvDADA??  wwvwDATAX[0[@~CHBpF}CHBvvI?HB|HHB= AHwJvcwJDATA[DATA``[[[p[[0[p[vewg3g3[[DATA[[DADAv`DA`DA??  wwve~wDATA[[[\CKC?@ v@[@[DATA@@[SEQUENCER_PT_previewSEQUENCER_PT_previewScene Preview/Render=DATA[[[ppDDppDD;F;F'7PGDATA[[zCAzCA A?|HB #<BiDATAg3@DATA`[[`[[[[0[KEL50[0[[[DATA[[dDASDAKgDAgDA??  LLK*LDATA[[[HCpHC@??  +EDATA[[[KK+EDATA[[C@zC Arro:o:|HPCGisK+EsDATA0[0[DATA`0[#X[DATA`[[0[[[0[MvE*5[[P[[DATAP[x[CA@DA)@2DA@2DA??  **Mv**DATAx[[P[vv+EDATA[[x[CC``D+[+[D);F;F'7PG**Mv+E*DATA[[zCAzCAKK A?|HB #<BiLDATA[@SC@ X[SCScenetageain[^h^([H[([I@0˻IqIqIqIII[[7 ZZD?dd??<  @@ ZQ! ????P[P[??????/tmp/ L?L?L??>??_??BLENDER_RENDERD?fC??T((R1< ?=>L>I?fff?@?@Aff?AA@?A <@?DATAl[`[[DATAl`[[network_render[[DATAl[server_addressH\ DATA H\[default]DATAl[`[pose_templatesDATA([p[a^DATAp[[([v^DATA[[p[.^DATA[H[[^DATAH[[h^DATA[H=x[[?L?B ?o:= ??8;P2 HB2 B2 HB2 HB2 HB2 HB2 HB>? #<===ff??AHz?=???C#y??#y??DATA$H=`GDATA$x[`GDATAX[h;dd|AJA6V{?DATAhP[RenderLayerrDATA[LNTCompositing Nodetree[x[ ^^DATA [J([ CompositeD[[X[CCBB(B8]CCuCCCCCCZ@i DATA ([Jx[[ Render Layers&[؍^X[ί.CCB(B8]ί.p~CCCί$8 KCCTT@i DATA x[J([Dilate/Erode ^^^^bBvoCCB(B8]bB1PIC CvoCBbB1P?C@i DATA[H[ PImageCC[p^??DATA[Q?DATA[H[[ PAlphaCC[^??DATA[N??DATA[H[ PZCC[??DATA[N??DATA[H([ PImagep~|C[p ??DATA[Q?DATA([H@[[ PAlphap~|C[Pnv ?DATA[N?DATA@[HX[([ OZ[?DATA[N?DATAX[Hx[@[ ONormal0[?DATA0[P?DATAx[H[X[ OUVP[?DATAP[P?DATA[H[x[ OSpeedp[?DATAp[P?DATA[H[[ OColor[??DATA[Q?DATA[H[[ ODiffuse[??DATA[Q?DATA[H[[ OSpecular[??DATA[Q?DATA[H[[ OShadow[ ??DATA[Q?DATA[H0[[ OAO[ ??DATA[Q?DATA0[HH[[ OReflect[ ??DATA[Q?DATAH[H`[0[ ORefract [ ??DATA [Q?DATA`[Hx[H[ OIndirect8[ ??DATA8[Q?DATAx[H[`[ OIndexOBP[?DATAP[N?DATA[HЁ^x[ OIndexMAh\?DATAh\N?DATAЁ^H^[ OMist^?DATA^N?DATA^H^Ё^ NEmit^??DATA^Q?DATA^H^^ MEnvironment؄^??DATA؄^Q?DATA^H0^^ LDiffuse Direct^??DATA^Q?DATA0^HH^^ KDiffuse Indirect^??DATA^Q?DATAH^H`^0^ ODiffuse Color ^??DATA ^Q?DATA`^Hx^H^ OGlossy Direct8^??DATA8^Q?DATAx^H^`^ OGlossy IndirectP^??DATAP^Q?DATA^H^x^ OGlossy Colorh^??DATAh^Q?DATA^H^^ OTransmission Direct^??DATA^Q?DATA^H؍^^ OTransmission Indirect^??DATA^Q?DATA؍^H^ OTransmission Color^??DATA^Q?DATA^H OMaskbBCȏ^ ^?DATAȏ^N?DATA^H OMask1PICvLC^u DATA^NDATA ^Kp^([x[([^DATA p^K^ ^([[[[DATA ^Kp^x[[^[IM^IMRender Result//emblem-new-off.pngh6h6gO??CA^CACameraamera.001?=B ByB??BALA^#LALamp????̬?AB>??^.?A4B?@@L=@ ???o:??????@?????^DATA^s????C?55?55?Л^??????DATAЛ^q??DATA ^ ))WOh^WOWorld???6$<6$<6$<??A @A@pAS8>L@?L=  ף;Ǝ@=??8^DATA 8^ [[OB^^OBCameraamera.001 ^  s=@@?????????????s=@@??????33?3?5)????r@???1??d8???>6 ?u=?????8^DATA8^??=L> ף<OB^h^^OBLamp ^  @@??????II????>5?5?5??5?@@??????22?3?'4'?>5?5??5?25??'zZ?>5?5??5?25?3+@c :=a?Dd8?<?>">u=??@???^DATA^??=L> ף<OBh^^^OBPlane^`Sx;G  xpR(1&\@s=@@??????_71V,I?????5?5?V,255?_71UY):?&EI@????r@?????5?5U5?5?Y)PY2l1? := :=0D??5?5U5?5?Y)PY2l1? := :=0D??d8? #=?>=????????@???(^h]DATAxpRDATA(1OB^^h^OBStar Offp4 FG  Ȳ^P^{S8x8?????????????????????????r=@@????r=@@?d8? #=?>=???????@??? <s8]DATA{SUDATA8x8DATAȲ^W^BevelX[ ף=ni=BDATAp^OP^Ȳ^SubsurfX[80DATAlP^U^MirrorX[o:OB^^OBStar On FG  ^ ^Z?????????????????????????????r=@@?d8? #=?>=???????@??? <8VpUDATA^DATAZDATA^W^BevelX[ ף=ni=BDATAp^O ^^SubsurfX[)5DATAl ^U^MirrorX[o:MAU&^ MAinactive1EN=́=ɠ=??????????L??????????????? #<2L>??L>???2?? ף; ף;G@C@ ????????@?=?==???q7???????L==ff????DATA q7  EDATAE3f ff33  f3   f f  f ff 3  3ff  3ffff    f 3f3  3f 333f  3  3  3  f  f3f    f3MA^&h^U MANoerialCe&?e&?e&???????????L??????????????? #<2L>??L>???2?? ף; ף;G@C@ ????????@?=?==???^???????L==ff????DATA ^   8^DATA8^!!!3!!!3cccccccccBBBfBBBf!!!3!!!3ccc̦BBBf!!!3cccBBBf̦BBBfccccccBBBfcccBBBfBBBf̦!!!3BBBfBBBfBBBf̦BBBfBBBfBBBfcccBBBfccccccccccccBBBfccc!!!3BBBf!!!3cccccc!!!3ccc̦!!!3!!!3BBBfccccccccc!!!3ccc!!!3cccccc!!!3BBBfccc̦BBBf!!!3BBBfcccccc̅̅cccBBBf!!!3MA^&h^MAYellowl.001FL?60=?|? ???????>?7?333?????????????? #<2L>??L>23??G>??2??V> ף;>I ABB ??????o:??@?=?==U???H^?9Aux@?(>= W>1,>L==ff????DATA H^  HI^DATA^33ff33       f3     f     f !$%&&%$"      f!'+--.-,+)'$"    f$,03455431/-+(%"   f 059:;;;:97631.+(%!   3f29= @ A B B B A ? > <9740-*'#   1;A E G H H H H G E D A ? <952/,($   ff<D I L N O O O N M K I G D A > ;740,($  ,D K P S T U V U T S Q O L J F C @ <951-($   f? L S W Y [ \ \ [ Z Y W T R O L H E A = 951,(# ffG S Z ] ` abba` _ \ Z W T Q M J E B = 950,&!  fP Z ` dfhhhgfec`] Y V R N J F B = 94/*$ *V ` fjlnnnnnmkhd_[ W S N J F A =82-'  *Z elprtuuwxyxtnga\ W S N J E @ ;60*# +_ jquxy{}  ~ sib\ W R N H C > 93,%fbnvz} '/2".% tha[ V Q L G A ;5.'  3cqz (8'G6L 70)!f` t} 0G6\LdUZKD5.vjb\ W R L F @ 92*"3:t"4!N=81Ap?>ҽ2Ep>ҽ8ñ>p>=DATAAGxH^DATA0H^4####DATADGx^DATA^3ME FG1x;GMEStare.001JRGLGOGhJGMG PG 3==pxs?ߍg?=CDATAJDATAhJGxLGDATALG7 ?~qxs?y7>!?~y?O?N~yON~pxs~7>?~8d>Av>v女>Q j5¾qqQ8dCv> v女3L>DATAMGxOGDATAOG4"""""""" " " " " " " "DATAPGxRGDATAdRG3     BR,@SGw\GBRAddh.001?ZG??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0SG??????????L>?????????????????????????????DATAZGs????C?~6=~.=8\G??????DATA08\Gq?>k?@? ף=?BR,\GwdG@SGBRBlob001?bG??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0]G??????????L>?????????????????????????????DATAbGs????C?._ra0dG??????DATA00dGq?>ףp?@?u=?BR,dGwlG\GBRBlur.004?jG??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0 eG??????????L>?????????????????????????????DATAjGs????C?~6=~.=(lG??????DATA0(lGq?>k?@? ף=?BR,lGwtGdGBRBrush?rG??????????L>?????????????????????????????# Kfff?=??????>!?>>>>?DATA0mG??????????L>?????????????????????????????DATArGs????C?._ra tG??????DATA0 tGq?>ףp?@?u=?BR,tGwx|GlGBRClay001?zG??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0tG??????????L>?????????????????????????????DATAzGs????C?._ra|G??????DATA0|Gq?>ףp?@?u=?BR,x|GwpGtGBRClone001?ЂG??????????L>?????????????????????????????# Kfff?=???333???>!>???DATA0|G??????????L>?????????????????????????????DATAЂGs????C?~6=~.=G??????DATA0Gq?>k?@? ף=?BR,pGwhGx|GBRCrease001?ȊG??????????L>?????????????????????????????# Kfff?=???>??>!>?>>>>?DATA0G??????????L>?????????????????????????????DATAȊGs????C?a2p? G??????DATA0Gq?>?@? #=?BR,hGw`GpGBRDarken06?G??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0G??????????L>?????????????????????????????DATAGs????C?~6=~.=G??????DATA0Gq?>k?@? ף=?BR,`GwXGhGBRDraw.001?G??????????L>?????????????????????????????# Kfff?=??????>!>?>>>>?DATA0ܔG??????????L>?????????????????????????????DATAGs????C?._raG??????DATA0Gq?>ףp?@?u=?BR,XGwPG`GBRFill/Deepen001?G??????????L>?????????????????????????????# Kfff?=???? ??>!>??>>??DATA0ԜG??????????L>?????????????????????????????DATAGs????C?._raG??????DATA0Gq?>ףp?@?u=?BR,PGwHGXGBRFlatten/Contrast001?G??????????L>?????????????????????????????# Kfff?=??????>!>??>>??DATA0̤G??????????L>?????????????????????????????DATAGs????C?._raG??????DATA0Gq?>ףp?@?u=?BR,HGw@GPGBRGrab001?G??????????L>?????????????????????????????K Kfff?=???L>??>!>>?>DATA0ĬG??????????L>?????????????????????????????DATAGs????C?._raG??????DATA0Gq?>ףp?@?u=?BR,@Gw8GHGBRInflate/Deflate001?G??????????L>?????????????????????????????# Kfff?=??????>!>@?@?@?>>>DATA0G??????????L>?????????????????????????????DATAGs????C?._raػG??????DATA0ػGq?>ףp?@?u=?BR,8Gw0G@GBRLayer001?G??????????L>?????????????????????????????# Kfff?=??????>!>?>>DATA0G??????????L>?????????????????????????????DATAGs????C?._raG??????DATA0Gq?>ףp?@?u=?BR,0Gw(G8GBRLighten5?G??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0G??????????L>?????????????????????????????DATAGs????C?~6=~.=G??????DATA0Gq?>k?@? ף=?BR,(Gw G0GBRMixh?G??????????L>????????????????????????????? # Kfff?=???333???>!>???DATA0G??????????L>?????????????????????????????DATAGs????C?~6=~.=G??????DATA0Gq?>k?@? ף=?BR, GwG(GBRMultiply?xG??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0G??????????L>?????????????????????????????DATAxGs????C?~6=~.=G??????DATA0Gq?>k?@? ף=?BR,Gwy; GBRNudge001?pG??????????L>?????????????????????????????# Kfff?=???? ??>!>>?>DATA0G??????????L>?????????????????????????????DATApGs????C?._ra y;??????DATA0 y;q?>ףp?@?u=?BR,y;wx;GBRPinch/Magnify001?;??????????L>?????????????????????????????# Kfff?=??????>!>@?@?@?>>>DATA0y;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,x;wp;y;BRPolish001?Ї;??????????L>?????????????????????????????# Kfff?=???????>!>??>>??DATA0;??????????L>?????????????????????????????DATAЇ;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,p;wh;x;BRScrape/Peaks001?ȏ;??????????L>?????????????????????????????# Kfff?=???? ??>!>??>>??DATA0;??????????L>?????????????????????????????DATAȏ;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,h;w`;p;BRSculptDraw?;??????????L>?????????????????????????????# Kfff?=??????>!wN??>>>>?DATA0;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,`;wX;h;BRSmear001?;??????????L>?????????????????????????????# Kfff?=???L>??>!>???DATA0ܙ;??????????L>?????????????????????????????DATA;s????C?~6=~.=;??????DATA0;q?>k?@? ף=?BR,X;wP;`;BRSmooth001?;??????????L>?????????????????????????????#Kfff?=??????>!>@?@?@?DATA0ԡ;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,P;wH;X;BRSnake Hook001?;??????????L>?????????????????????????????K Kfff?=???? ??>!>>?>DATA0̩;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,H;w@;P;BRSoften01?;??????????L>?????????????????????????????# Kfff?=???L>??>!>???DATA0ı;??????????L>?????????????????????????????DATA;s????C?~6=~.=;??????DATA0;q?>k?@? ף=?BR,@;w8;H;BRSubtract?;??????????L>????????????????????????????? # Kfff?=???L>??>!>???DATA0;??????????L>?????????????????????????????DATA;s????C?~6=~.=;??????DATA0;q?>k?@? ף=?BR,8;w0;@;BRTexDraw?;??????????L>?????????????????????????????# Kfff?=???333???>!>???>>?DATA0;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,0;w(;8;BRThumb001?;??????????L>?????????????????????????????K Kfff?=???? ??>!>>?>DATA0;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?BR,(;w0;BRTwist001?;??????????L>?????????????????????????????K Kfff?=??????>!>>?>DATA0;??????????L>?????????????????????????????DATA;s????C?._ra;??????DATA0;q?>ףp?@?u=?DNA1WSDNANAME+ *next*prev*data*first*lastxyxminxmaxyminymax*pointergroupvalval2typesubtypeflagname[64]saveddatalentotallen*newid*libname[66]padusicon_idpad2*propertiesid*idblock*filedataname[1024]filepath[1024]tot*parentw[2]h[2]changed[2]changed_timestamp[2]*rect[2]*obblocktypeadrcodename[128]*bp*beztmaxrcttotrctvartypetotvertipoextraprtbitmaskslide_minslide_maxcurval*drivercurvecurshowkeymuteipoposrelativetotelem*weightsvgroup[64]sliderminslidermax*adt*refkeyelemstr[64]elemsizeblock*ipo*fromtotkeyslurph*line*formatblenlinenostartendpad1flagscolor[4]pad[4]*namenlineslines*curl*sellcurcselcmarkers*undo_bufundo_posundo_len*compiledmtimesizeseekdtxpassepartalphaclipstaclipendlensortho_scaledrawsizesensor_xsensor_yshiftxshiftyYF_dofdist*dof_obsensor_fitpad[7]*sceneframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassibufs*gputexture*anim*rr*renders[8]render_slotlast_render_slotsourcelastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_typegen_flagaspxaspytexcomaptomaptonegblendtype*object*texuvname[64]projxprojyprojzmappingofs[3]size[3]rottexflagcolormodelpmaptopmaptonegnormapspacewhich_outputbrush_map_modergbkdef_varcolfacvarfacnorfacdispfacwarpfaccolspecfacmirrfacalphafacdifffacspecfacemitfachardfacraymirrfactranslfacambfaccolemitfaccolreflfaccoltransfacdensfacscatterfacreflfactimefaclengthfacclumpfacdampfackinkfacroughfacpadensfacgravityfaclifefacsizefacivelfacfieldfacshadowfaczenupfaczendownfacblendfac*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizefalloff_typefalloff_softnessradiuscolor_sourcetotpointspdpadpsyspsys_cache_spaceob_cache_space*point_tree*point_datanoise_sizenoise_depthnoise_influencenoise_basispdpad3[3]noise_facspeed_scalefalloff_speed_scalepdpad2*coba*falloff_curveresol[3]interp_typefile_formatextendsmoked_typeint_multiplierstill_framesource_path[1024]*datasetcachedframeoceanmod[64]outputnoisesizeturbulbrightcontrastsaturationrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxtexfilterafmaxxrepeatyrepeatcheckerdistnablaiuser*nodetree*plugin*env*pd*vd*otuse_nodesloc[3]rot[3]mat[4][4]min[3]max[3]cobablend_color[3]blend_factorblend_typepad[3]modetotexshdwrshdwgshdwbshdwpadenergydistspotsizespotblendhaintatt1att2*curfalloffshadspotsizebiassoftcompressthreshpad5[3]bufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizezadapt_threshray_samp_methodtexactshadhalostepsun_effect_typeskyblendtypehorizon_brightnessspreadsun_brightnesssun_sizebackscattered_lightsun_intensityatm_turbidityatm_inscattering_factoratm_extinction_factoratm_distance_factorskyblendfacsky_exposuresky_colorspacepad4[6]*mtex[18]pr_texturepad6[4]densityemissionscatteringreflectionemission_col[3]transmission_col[3]reflection_col[3]density_scaledepth_cutoffasymmetrystepsize_typeshadeflagshade_typeprecache_resolutionstepsizems_diffms_intensityms_spreadalpha_blendface_orientationmaterial_typespecrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyvolgamefresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2gloss_mirgloss_trasamp_gloss_mirsamp_gloss_traadapt_thresh_miradapt_thresh_traaniso_gloss_mirdist_mirfadeto_mirshade_flagmode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easestrand_surfnorstrand_minstrand_widthfadestrand_uvname[64]sbiaslbiasshad_alphaseptexrgbselpr_typepr_backpr_lampml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_spec*groupfrictionfhreflectfhdistxyfrictdynamodesss_radius[3]sss_col[3]sss_errorsss_scalesss_iorsss_colfacsss_texfacsss_frontsss_backsss_flagsss_presetmapto_texturedshadowonly_flagindexgpumaterial*bbselcol1selcol2zquat[4]expxexpyexpzradrad2s*mat*imatelemsdisp*editelems**matflag2totcolwiresizerendersizethresh*lastelemvec[3][3]alfaweighth1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsvtilt_interpradius_interpcharidxkernwhnurbs*keyindexshapenrnurb*editnurb*bevobj*taperobj*textoncurve*path*keybevdrawflagtwist_modetwist_smoothsmallcaps_scalepathlenbevresolwidthext1ext2resolu_renresolv_renactnu*lastselspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*str*selboxes*editfontfamily[24]*vfont*vfontb*vfonti*vfontbisepcharctimetotboxactbox*tbselstartselend*strinfocurinfo*mpoly*mtpoly*mloop*mloopuv*mloopcol*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselect*edit_meshvdataedatafdatapdataldatatotedgetotfacetotselecttotpolytotloopact_facesmoothreshsubdivsubdivrsubsurftypeeditflag*mr*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasebweightdef_nr*dwtotweightco[3]no[3]loopstartveuv[2]co[2]fis[256]totdisp(*disps)()v[4]midpad[2]v[2]*faces*colfaces*edges*vertslevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creasesstackindex*errormodifier*texture*map_objectuvlayer_name[64]uvlayer_tmptexmappingsubdivTyperenderLevels*emCache*mCachedefaxispad[6]lengthrandomizeseed*ob_arm*start_cap*end_cap*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerance*mirror_obsplit_anglevalueresval_flagslim_flagse_flagsbevel_angledefgrp_name[64]*domain*flow*colltimestrengthdirectionmidlevel*projectors[10]*imagenum_projectorsaspectxaspectyscalexscaleypercentfaceCountfacrepeat*objectcenterstartxstartyheightnarrowspeeddampfallofftimeoffslifetimedeformflagmulti*prevCossubtarget[64]parentinv[4][4]cent[3]*indexartotindexforce*clothObject*sim_parms*coll_parms*point_cacheptcaches*x*xnew*xold*current_xnew*current_x*current_v*mfacesnumvertsnumfacestime_xtime_xnew*bvhtree*v*dmcfraoperationvertextotinfluencegridsize*bindinfluences*bindoffsets*bindcagecostotcagevert*dyngrid*dyninfluences*dynverts*pad2dyngridsizedyncellmin[3]dyncellwidthbindmat[4][4]*bindweights*bindcos(*bindfunc)()*psystotdmverttotdmedgetotdmfacepositionrandom_position*facepavgroupprotectlvlsculptlvltotlvlsimple*fss*target*auxTargetvgroup_name[64]keepDistshrinkTypeshrinkOptsprojAxissubsurfLevels*originfactorlimit[2]originOptsoffset_facoffset_fac_vgcrease_innercrease_outercrease_rimmat_ofsmat_ofs_rim*ob_axisstepsrender_stepsiterscrew_ofsangle*ocean*oceancacheresolutionspatial_sizewind_velocitysmallest_wavewave_alignmentwave_directionwave_scalechop_amountfoam_coveragebakestartbakeendcachepath[1024]foamlayername[64]cachedgeometry_moderefreshrepeat_xrepeat_yfoam_fade*object_from*object_tofalloff_radiusedit_flagsdefault_weight*cmap_curveadd_thresholdrem_thresholdmask_constantmask_defgrp_name[64]mask_tex_use_channel*mask_texture*mask_tex_map_objmask_tex_mappingmask_tex_uvlayer_name[64]pad_i1defgrp_name_a[64]defgrp_name_b[64]default_weight_adefault_weight_bmix_modemix_setpad_c1[6]proximity_modeproximity_flags*proximity_ob_targetmin_distmax_distpad_s1*canvas*brushthresholdscalehermite_num*lattpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*def*latticedatalatmat[4][4]*editlattvec[8][3]*sculptpartypepar1par2par3parsubstr[64]*track*proxy*proxy_group*proxy_from*action*poselib*pose*gpdavs*mpathconstraintChannelseffectdefbasemodifiersrestore_mode*matbitsactcoldloc[3]orig[3]dsize[3]dscale[3]drot[3]dquat[4]rotAxis[3]drotAxis[3]rotAngledrotAngleobmat[4][4]constinv[4][4]imat_ren[4][4]laypad6colbitstransflagprotectflagtrackflagupflagnlaflagipoflagscaflagscavisflagpad5dupondupoffdupstadupendsfmassdampinginertiaformfactorrdampingmarginmax_velmin_velm_contactProcessingThresholdobstacleRadrotmodeboundtypecollision_boundtyperestrictflagdtempty_drawtypeempty_drawsizedupfacescapropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2*bsoftsoftflaganisotropicFriction[3]constraintsnlastripshooksparticlesystem*soft*dup_groupbody_typeshapeflag*fluidsimSettings*derivedDeform*derivedFinallastDataMaskcustomdata_maskstateinit_stategpulamppc_ids*duplilistima_ofs[2]curindexactiveoriglayomat[4][4]orco[3]no_drawanimateddeflectforcefieldshapetex_modekinkkink_axiszdirf_strengthf_dampf_flowf_sizef_powermaxdistmindistf_power_rmaxradminradpdef_damppdef_rdamppdef_permpdef_frictpdef_rfrictpdef_sticknessabsorptionpdef_sbdamppdef_sbiftpdef_sboftclump_facclump_powkink_freqkink_shapekink_ampfree_endtex_nabla*rngf_noiseweight[13]global_gravityrt[3]totdataframetotpointdata_types*data[8]*cur[8]extradatastepsimframestartframeendframeeditframelast_exactlast_validcompressionprev_name[64]info[64]path[1024]*cached_framesmem_cache*edit(*free_edit)()linStiffangStiffvolumeviterationspiterationsditerationsciterationskSRHR_CLkSKHR_CLkSSHR_CLkSR_SPLT_CLkSK_SPLT_CLkSS_SPLT_CLkVCFkDPkDGkLFkPRkVCkDFkMTkCHRkKHRkSHRkAHRcollisionflagsnumclusteriterationsweldingtotspring*bpoint*bspringmsg_lockmsg_valuenodemassnamedVG_Mass[64]gravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupnamedVG_Softgoal[64]fuzzynessinspringinfrictnamedVG_Spring_K[64]efraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokesolver_IDplasticspringpreload*scratchshearstiffinpush*pointcache*effector_weightslcom[3]lrot[3][3]lscale[3][3]last_framevel[3]*fmdshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgrav[3]animStartanimEndbakeStartbakeEndframeOffsetgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshBBsurfdataPath[1024]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsparticleInfSizeparticleInfAlphafarFieldSize*meshVelocitiescpsTimeStartcpsTimeEndcpsQualityattractforceStrengthattractforceRadiusvelocityforceStrengthvelocityforceRadiuslastgoodframeanimRatemistypehorrhorghorbzenrzengzenbfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypeocclusionResphysicsEngineticratemaxlogicstepphysubstepmaxphystepmisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolorao_adapt_threshao_adapt_speed_facao_approx_errorao_approx_correctionao_indirect_energyao_env_energyao_pad2ao_indirect_bouncesao_padao_samp_methodao_gather_methodao_approx_passes*aosphere*aotablesselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecTypecodecSpatialQualitycodeccodecFlagscolorDepthcodecTemporalQualityminSpatialQualityminTemporalQualitykeyFrameRatebitRateaudiocodecTypeaudioSampleRateaudioBitDepthaudioChannelsaudioCodecFlagsaudioBitRateaudio_codecvideo_bitrateaudio_bitrateaudio_mixrateaudio_channelsaudio_padaudio_volumegop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemainspeed_of_sounddoppler_factordistance_model*mat_override*light_overridelay_zmasklayflagpassflagpass_xorimtypeplanesqualitycompressexr_codeccineon_flagcineon_whitecineon_blackcineon_gammajp2_flagim_format*avicodecdata*qtcodecdataqtcodecsettingsffcodecdatasubframepsfrapefraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribframe_stepstereomodedimensionspresetmaximsizexschyschxpartsypartssubimtypedisplaymodescemoderaytrace_optionsraytrace_structureocrespad4alphamodeosafrs_secedgeintsafetyborderdisprectlayersactlaymblur_samplesxaspyaspfrs_sec_basegausscolor_mgt_flagpostgammaposthuepostsatdither_intensitybake_osabake_filterbake_modebake_flagbake_normal_spacebake_quad_splitbake_maxdistbake_biasdistbake_padpic[1024]stampstamp_font_idstamp_udata[768]fg_stamp[4]bg_stamp[4]seq_prev_typeseq_rend_typeseq_flagpad5[5]simplify_flagsimplify_subsurfsimplify_shadowsamplessimplify_particlessimplify_aossscineonwhitecineonblackcineongammajp2_presetjp2_depthrpad3domeresdomemodedomeangledometiltdomeresbuf*dometextengine[32]name[32]particle_percsubsurf_maxshadbufsample_maxao_errortiltresbuf*warptextcol[3]cellsizecellheightagentmaxslopeagentmaxclimbagentheightagentradiusedgemaxlenedgemaxerrorregionminsizeregionmergesizevertsperpolydetailsampledistdetailsamplemaxerrorframingplayerflagrt1rt2aasamplespad4[3]domestereoflageyeseparationrecastDatamatmodeexitkeyobstacleSimulationlevelHeight*camera*paint_cursorpaint_cursor_col[4]paintseam_bleednormal_anglescreen_grab_size[2]*paintcursorinverttotrekeytotaddkeybrushtypebrush[7]emitterdistselectmodeedittypedraw_stepfade_framesradial_symm[3]last_xlast_ylast_angledraw_anchoredanchored_sizeanchored_location[3]anchored_initial_mouse[2]draw_pressurepressure_valuespecial_rotation*vpaint_prev*wpaint_prevmat[3][3]unprojected_radius*vpaint*wpaint*uvsculptvgroup_weightcornertypeeditbutflagjointrilimitdegrturnextr_offsdoublimitnormalsizeautomergesegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_marginuvcalc_mapdiruvcalc_mapalignuvcalc_flaguv_flaguv_selectmodeuv_subsurf_levelgpencil_flagsautoik_chainlenimapaintparticleproportional_sizeselect_threshclean_threshautokey_modeautokey_flagmultires_subdiv_typepad2[5]skgen_resolutionskgen_threshold_internalskgen_threshold_externalskgen_length_ratioskgen_length_limitskgen_angle_limitskgen_correlation_limitskgen_symmetry_limitskgen_retarget_angle_weightskgen_retarget_length_weightskgen_retarget_distance_weightskgen_optionsskgen_postproskgen_postpro_passesskgen_subdivisions[3]skgen_multi_level*skgen_templatebone_sketchingbone_sketching_convertskgen_subdivision_numberskgen_retarget_optionsskgen_retarget_rollskgen_side_string[8]skgen_num_string[8]edge_modeedge_mode_live_unwrapsnap_modesnap_flagsnap_targetproportionalprop_modeproportional_objectspad[5]auto_normalizemultipaintuse_uv_sculptuv_sculpt_settingsuv_sculpt_tooluv_relax_methodsculpt_paint_settingssculpt_paint_unified_sizesculpt_paint_unified_unprojected_radiussculpt_paint_unified_alphaunified_paint_settingstotobjtotlamptotobjseltotcurvetotmeshtotarmaturescale_lengthsystemsystem_rotationgravity[3]quick_cache_step*world*setbase*basact*obeditcursor[3]twcent[3]twmin[3]twmax[3]layactlay_updated*ed*toolsettings*statsaudiotransform_spaces*sound_scene*sound_scene_handle*sound_scrub_handle*speaker_handles*fps_info*theDagdagisvaliddagflagsactive_keyingsetkeyingsetsgmunitphysics_settings*clipcustomdata_mask_modalcuserblendviewwinmat[4][4]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]viewmatob[4][4]persmatob[4][4]twmat[4][4]viewquat[4]zfaccamdxcamdypixsizecamzoomtwdrawflagis_persprflagviewlockperspclip[6][4]clip_local[6][4]*clipbb*localvd*ri*render_engine*depths*sms*smooth_timerlviewquat[4]lpersplviewgridviewtwangle[3]rot_anglerot_axis[3]pad2[4]regionbasespacetypeblockscaleblockhandler[8]bundle_sizebundle_drawtypelay_used*ob_centrebgpicbase*bgpicob_centre_bone[64]drawtypeob_centre_cursorscenelockaroundgridnearfarmodeselectgridlinesgridsubdivgridflagtwtypetwmodetwflagpad2[2]afterdraw_transpafterdraw_xrayafterdraw_xraytranspzbufxraypad3[2]*properties_storageverthormaskmin[2]max[2]minzoommaxzoomscrollscroll_uikeeptotkeepzoomkeepofsalignwinxwinyoldwinxoldwiny*tab_offsettab_numtab_currpt_maskv2d*adsghostCurvesautosnapcursorValmainbmainbomainbuserre_alignpreviewtexture_contextpathflagdataicon*pinid*texuserrender_sizechanshownzebrazoomtitle[32]dir[1056]file[256]renamefile[256]renameedit[256]filter_glob[64]active_filesel_firstsel_lastsortdisplayf_fpfp_str[8]scroll_offset*params*files*folders_prev*folders_next*op*smoothscroll_timer*layoutrecentnrbookmarknrsystemnrtree*treestoresearch_string[32]search_tseoutlinevisstoreflagsearch_flags*cumapscopessample_line_histcursor[2]centxcentycurtilelockpindt_uvstickydt_uvstretch*texttopviewlinesmenunrlheightcwidthlinenrs_totleftshowlinenrstabnumbershowsyntaxline_hlightoverwritelive_editpix_per_linetxtscrolltxtbarwordwrapdopluginsfindstr[256]replacestr[256]margin_column*drawcache*py_draw*py_event*py_button*py_browsercallback*py_globaldictlastspacescriptname[1024]scriptarg[256]*script*but_refs*arraycachescache_display*idaspectpadfmxmy*edittreetreetypetexfromshaderfromlinkdraglen_alloccursorscrollbackhistoryprompt[256]language[32]sel_startsel_endfilter[64]xlockofylockofuserpath_lengthloc[2]stabmat[4][4]unistabmat[4][4]postproc_flagfilename[1024]blf_iduifont_idr_to_lpointskerningitalicboldshadowshadxshadyshadowalphashadowcolorpaneltitlegrouplabelwidgetlabelwidgetpanelzoomminlabelcharsminwidgetcharscolumnspacetemplatespaceboxspacebuttonspacexbuttonspaceypanelspacepanelouteroutline[4]inner[4]inner_sel[4]item[4]text[4]text_sel[4]shadedshadetopshadedownalpha_checkinner_anim[4]inner_anim_sel[4]inner_key[4]inner_key_sel[4]inner_driven[4]inner_driven_sel[4]header[4]show_headerwcol_regularwcol_toolwcol_textwcol_radiowcol_optionwcol_togglewcol_numwcol_numsliderwcol_menuwcol_pulldownwcol_menu_backwcol_menu_itemwcol_boxwcol_scrollwcol_progresswcol_list_itemwcol_statepaneliconfile[256]icon_alphaback[4]title[4]text_hi[4]header_title[4]header_text[4]header_text_hi[4]button[4]button_title[4]button_text[4]button_text_hi[4]list[4]list_title[4]list_text[4]list_text_hi[4]panel[4]panel_title[4]panel_text[4]panel_text_hi[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]speaker[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[4]edge_facesel[4]edge_crease[4]face[4]face_select[4]face_dot[4]extra_edge_len[4]extra_face_angle[4]extra_face_area[4]pad3[4]normal[4]vertex_normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]cframe[4]nurb_uline[4]nurb_vline[4]act_spline[4]nurb_sel_uline[4]nurb_sel_vline[4]lastsel_point[4]handle_free[4]handle_auto[4]handle_vect[4]handle_align[4]handle_auto_clamped[4]handle_sel_free[4]handle_sel_auto[4]handle_sel_vect[4]handle_sel_align[4]handle_sel_auto_clamped[4]ds_channel[4]ds_subchannel[4]console_output[4]console_input[4]console_info[4]console_error[4]console_cursor[4]vertex_sizeoutline_widthfacedot_sizenoodle_curvingsyntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]editmesh_active[4]handle_vertex[4]handle_vertex_select[4]handle_vertex_sizemarker_outline[4]marker[4]act_marker[4]sel_marker[4]dis_marker[4]lock_marker[4]bundle_solid[4]path_before[4]path_after[4]camera_path[4]hpad[7]preview_back[4]preview_stitch_face[4]preview_stitch_edge[4]preview_stitch_vert[4]preview_stitch_stitchable[4]preview_stitch_unstitchable[4]preview_stitch_active[4]match[4]selected_highlight[4]solid[4]tuitbutstv3dtfiletipotinfotacttnlatseqtimatexttoopsttimetnodetlogictuserpreftconsoletcliptarm[20]active_theme_areamodule[64]spec[4]dupflagsavetimetempdir[768]fontdir[768]renderdir[1024]textudir[768]plugtexdir[768]plugseqdir[768]pythondir[768]sounddir[768]image_editor[1024]anim_player[1024]anim_player_presetv2d_min_gridsizetimecode_styleversionsdbl_click_timegameflagswheellinescrolluiflaglanguageuserprefviewzoommixbufsizeaudiodeviceaudiorateaudioformataudiochannelsdpiencodingtransoptsmenuthreshold1menuthreshold2themesuifontsuistyleskeymapsuser_keymapsaddonskeyconfigstr[64]undostepsundomemorygp_manhattendistgp_euclideandistgp_erasergp_settingstb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratewmdrawmethoddragthresholdmemcachelimitprefetchframesframeserverportpad_rot_angleobcenter_diarvisizervibrightrecent_filessmooth_viewtxglreslimitcurssizecolor_picker_typeipo_newkeyhandles_newscrcastfpsscrcastwaitwidget_unitanisotropic_filteruse_16bit_texturespad8ndof_sensitivityndof_flagglalphacliptext_renderpad9coba_weightsculpt_paint_overlay_col[3]tweak_thresholdauthor[80]compute_device_typecompute_device_idvertbaseedgebaseareabase*newsceneredraws_flagfulltempwiniddo_drawdo_refreshdo_draw_gesturedo_draw_paintcursordo_draw_dragswapmainwinsubwinactive*animtimer*contexthandler[8]*newvvec*v1*v2*typepanelname[64]tabname[64]drawname[64]ofsxofsysizexsizeylabelofsruntime_flagcontrolsnapsortorder*paneltab*activedatalist_scrolllist_sizelist_last_lenlist_grip_sizelist_search[64]*v3*v4*fullbutspacetypeheadertypespacedatahandlersactionzoneswinrctdrawrctswinidregiontypealignmentdo_draw_overlayuiblockspanels*headerstr*regiondatasubvstr[4]subversionpadsminversionminsubversionwinpos*curscreen*curscenefileflagsglobalfrevisionname[256]orig_widthorig_heightbottomrightxofsyofslift[3]gamma[3]gain[3]dir[768]tcbuild_size_flagsbuild_tc_flagsdonestartstillendstill*stripdata*crop*transform*color_balance*instance_private_data**current_private_data*tmpstartofsendofsmachinestartdispenddispsatmulhandsizeanim_preseekstreamindex*strip*scene_cameraeffect_faderspeed_fader*seq1*seq2*seq3seqbase*sound*scene_soundpitchpanscenenrmulticam_sourcestrobe*effectdataanim_startofsanim_endofsblend_modeblend_opacity*oldbasep*parseq*seqbasepmetastack*act_seqact_imagedir[1024]act_sounddir[1024]over_ofsover_cfraover_flagover_borderedgeWidthforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyInixIniyInirotIniinterpolationuniform_scale*frameMapglobalSpeedlastValidFramebuttypeuserjitstatotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[64]vgroupname_v[64]*keysminfacnrusedusedelem*poinresetdistlastval*makeyqualqual2targetName[64]toggleName[64]value[64]maxvalue[64]delaydurationmaterialName[64]damptimerpropname[64]matname[64]axisflagposechannel[64]constraint[64]*fromObjectsubject[64]body[64]otypepulsefreqtotlinks**linksleveltapjoyindexaxis_singleaxisfbuttonhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalostate_mask*actframeProp[64]blendinpriorityend_resetstrideaxisstridelengthlayer_weightmin_gainmax_gainreference_distancemax_distancerolloff_factorcone_inner_anglecone_outer_anglecone_outer_gainsndnrsound3Dpad6[1]*melinVelocity[3]angVelocity[3]localflagdyn_operationforceloc[3]forcerot[3]pad1[3]linearvelocity[3]angularvelocity[3]*referenceminmaxrotdampminloc[3]maxloc[3]minrot[3]maxrot[3]matprop[64]butstabutenddistributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[64]*toObjectbodyTypefilename[64]loadaniname[64]int_argfloat_arg*subtargetfacingaxisvelocityaccelerationturnspeedupdateTime*navmeshgo*newpackedfileattenuationdistance*cache*waveform*playback_handle*lamprengobjectdupli_ofs[3]*propchildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]arm_rollxwidthzwidthease1ease2rad_headrad_tailpad[1]bonebasechainbase*edbo*act_bone*act_edbone*sketchgevertdeformerlayer_usedlayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefpathbcpathac*pointsstart_frameend_frameghost_sfghost_efghost_bcghost_acghost_typeghost_stepghost_flagpath_typepath_steppath_viewflagpath_bakeflagpath_sfpath_efpath_bcpath_acikflagagrp_indexconstflagselectflagpad0[6]*bone*childiktreesiktree*custom*custom_txeul[3]chan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretchikrotweightiklinweight*tempchanbase*chanhashproxy_layerstride_offset[3]cyclic_offset[3]agroupsactive_groupiksolver*ikdata*ikparamproxy_act_bone[64]numiternumstepminstepmaxstepsolverfeedbackmaxveldampmaxdampepschannelscustomColcscurvesgroupsactive_markeridroot*source*filter_grpsearchstr[64]filterflagrenameIndexadstimeslide*grpname[30]ownspacetarspaceenforceheadtaillin_errorrot_error*tarmatrix[4][4]spacerotOrdertarnumtargetsiterationsrootbonemax_rootbone*poletarpolesubtarget[64]poleangleorientweightgrabtarget[3]numpointschainlenxzScaleModereserved1reserved2minmaxflagstuckcache[3]lockflagfollowflagvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzinvmat[4][4]fromtomap[3]expofrom_min[3]from_max[3]to_min[3]to_max[3]rotAxiszminzmaxpad[9]track[64]object[64]*depth_obchannel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettypeis_copyexternal*new_sock*storagelimitlocxlocy*default_valuestack_indexstack_typeown_indexto_index*groupsock*linkns*rectxsizeysize*new_nodelastyoutputsminiwidthupdatelabel[64]custom1custom2custom3custom4need_execexec*threaddatatotrbutrprvr*block*typeinfo*fromnode*tonode*fromsock*tosocknodeslinksinitcur_indexnodetype*execdata(*progress)()(*stats_draw)()(*test_break)()*tbh*prh*sdhvalue[3]value[4]cyclicmoviesamplesmaxspeedminspeedcurvedpercentxpercentybokehgammaimage_in_widthimage_in_heightcenter_xcenter_yspinwrapsigma_colorsigma_spacehuet1t2t3fstrengthfalphakey[4]algorithmchannelx1x2y1y2fac_x1fac_x2fac_y1fac_y2colname[64]bktypepad_c1gamcono_zbuffstopmaxblurbthreshrotationpad_f1*dict*nodecolmodmixfadeangle_ofsmcjitprojfitslope[3]power[3]lift_lgg[3]gamma_inv[3]limchanunspilllimscaleuspillruspillguspillbtex_mappingcolor_mappingsun_direction[3]turbiditycolor_spacegradient_typecoloringmusgrave_typewave_typeshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablepresetchanged_timestampcurrcliprcm[4]black[3]white[3]bwmul[3]sample[3]x_resolutiondata_r[256]data_g[256]data_b[256]data_luma[256]sample_fullsample_linesaccuracywavefrm_modewavefrm_alphawavefrm_yfacwavefrm_heightvecscope_alphavecscope_heightminmax[3][2]hist*waveform_1*waveform_2*waveform_3*vecscopewaveform_totoffset[2]clonemtex*icon_imbuficon_filepath[1024]normal_weightob_modejittersmooth_stroke_radiussmooth_stroke_factorratergb[3]sculpt_planeplane_offsetsculpt_toolvertexpaint_toolimagepaint_toolpad3[5]autosmooth_factorcrease_pinch_factorplane_trimtexture_sample_biastexture_overlay_alphaadd_col[3]sub_col[3]active_rndactive_cloneactive_mask*layerstypemap[32]totlayermaxlayertotsize*pool*externalrot[4]ave[3]*groundwander[3]rest_lengthparticle_index[2]delete_flagnumparentpa[4]w[4]fuv[4]foffsetprev_state*hair*boiddietimenum_dmcachehair_indexalivespring_kplasticity_constantyield_ratioplasticity_balanceyield_balanceviscosity_omegaviscosity_betastiffness_kstiffness_knearrest_densitybuoyancyspring_frames*boids*fluiddistrphystypeavemodereacteventdrawdraw_asdraw_sizechildtyperen_assubframesdraw_colren_stephair_stepkeys_stepadapt_angleadapt_pixrotfromintegratorbb_alignbb_uv_splitbb_animbb_split_offsetbb_tiltbb_rand_tiltbb_offset[2]bb_size[2]bb_vel_headbb_vel_tailcolor_vec_maxsimplify_refsizesimplify_ratesimplify_transitionsimplify_viewporttimetweakcourant_targetjitfaceff_hairgrid_randps_offset[1]grid_reseffector_amounttime_flagtime_pad[3]partfactanfactanphasereactfacob_vel[3]avefacphasefacrandrotfacrandphasefacrandsizeacc[3]dragfacbrownfacrandlengthchild_nbrren_child_nbrparentschildsizechildrandsizechildradchildflatclumppowkink_flatkink_amp_clumprough1rough1_sizerough2rough2_sizerough2_thresrough_endrough_end_shapeclengthclength_thresparting_facparting_minparting_maxbranch_thresdraw_line[2]path_startpath_endtrail_countkeyed_loopsdupliweights*eff_group*dup_ob*bb_ob*pd2*part*particles**pathcache**childcachepathcachebufschildcachebufs*clmd*hair_in_dm*hair_out_dm*target_ob*latticetree_framebvhtree_framechild_seedtotunexisttotchildtotcachedtotchildcachetarget_psystotkeyedbakespacebb_uvname[3][64]vgroup[12]vg_negrt3*renderdata*effectors*fluid_springstot_fluidspringsalloc_fluidsprings*tree*pdd*franddt_frac_padCdisCvistructuralbendingmax_bendmax_structmax_shearavg_spring_lentimescaleeff_force_scaleeff_wind_scalesim_time_oldvelocity_smoothcollider_frictionvel_dampingstepsPerFrameprerollmaxspringlensolver_typevgroup_bendvgroup_massvgroup_structshapekey_restpresetsreset*collision_listepsilonself_frictionselfepsilonrepel_forcedistance_repelself_loop_countloop_countpressurethicknessstrokesframenum*actframegstepinfo[128]sbuffer_sizesbuffer_sflag*sbufferlistprintlevelstorelevel*reporttimer*windrawable*winactivewindowsinitializedfile_savedop_undo_depthoperatorsqueuereportsjobspaintcursorsdragskeyconfigs*defaultconf*addonconf*userconftimers*autosavetimer*ghostwingrabcursor*screen*newscreenscreenname[64]posxposywindowstatemonitorlastcursormodalcursoraddmousemove*eventstate*curswin*tweakdrawmethoddrawfail*drawdatamodalhandlerssubwindowsgestureidname[64]propvalueshiftctrlaltoskeykeymodifiermaptype*ptr*remove_item*add_itemitemsdiff_itemsspaceidregionidkmi_id(*poll)()*modal_itemsbasename[64]actkeymap*customdata*py_instance*reportsmacro*opm*edatainfluence*coefficientsarraysizepoly_orderamplitudephase_multiplierphase_offsetvalue_offsetmidvalbefore_modeafter_modebefore_cyclesafter_cyclesrectphasemodificationstep_size*rna_pathpchan_name[32]transChanidtypetargets[8]num_targetsvariablesexpression[256]*expr_compvec[2]*fptarray_indexcolor_modecolor[3]from[128]to[128]mappingsstrips*remapfcurvesstrip_timeblendmodeextendmode*speaker_handlegroup[64]groupmodekeyingflagpathstypeinfo[64]active_path*tmpactnla_tracks*actstripdriversoverridesact_blendmodeact_extendmodeact_influenceruleoptionsfear_factorsignal_idlook_aheadoloc[3]queue_sizewanderflee_distancehealthstate_idrulesconditionsactionsruleset_typerule_fuzzinesslast_state_idlanding_smoothnessbankingaggressionair_min_speedair_max_speedair_max_accair_max_aveair_personal_spaceland_jump_speedland_max_speedland_max_accland_max_aveland_personal_spaceland_stick_forcestates*smd*fluid_group*coll_group*wt*tex_wt*tex_shadow*shadowp0[3]p1[3]dxomegatempAmbbetares[3]amplifymaxresviewsettingsnoisediss_percentdiss_speedres_wt[3]dx_wtv3dnumcache_compcache_high_comp*point_cache[2]ptcaches[2]border_collisionstime_scalevorticityvelocity[2]vel_multivgrp_heat_scale[2]vgroup_flowvgroup_densityvgroup_heat*points_old*velmat_old[4][4]volume_maxvolume_mindistance_maxdistance_referencecone_angle_outercone_angle_innercone_volume_outerrender_flagbuild_size_flagbuild_tc_flaglastsize[2]tracking*tracking_contextproxytrack_preview_height*track_previewtrack_pos[2]track_disabled*markerslide_scale[2]error*intrinsicssensor_widthpixel_aspectfocalunitsprincipal[2]k1k2k3pos[2]pat_min[2]pat_max[2]search_min[2]search_max[2]markersnrlast_marker*markersbundle_pos[3]pat_flagsearch_flagframes_limitpattern_matchtrackerpyramid_levelsminimum_correlationdefault_trackerdefault_pyramid_levelsdefault_minimum_correlationdefault_pattern_sizedefault_search_sizedefault_frames_limitdefault_margindefault_pattern_matchdefault_flagpodkeyframe1keyframe2refine_camera_intrinsicspad23clean_framesclean_actionclean_errorobject_distancetot_trackact_trackmaxscale*rot_tracklocinfscaleinfrotinf*scaleibuflast_cameracamnr*camerastracksreconstructionmessage[256]settingscamerastabilization*act_trackobjectsobjectnrtot_object*brush_groupcurrent_frameformatdisp_typeimage_fileformateffect_uipreview_idinit_color_typepad_simage_resolutionsubstepsinit_color[4]*init_textureinit_layername[64]dry_speedcolor_dry_thresholddepth_clampdisp_factorspread_speedcolor_spread_speedshrink_speeddrip_veldrip_accinfluence_scaleradius_scalewave_dampingwave_speedwave_timescalewave_springimage_output_path[1024]output_name[64]output_name2[64]*pmdsurfacesactive_surerror[64]collisionwetnessparticle_radiusparticle_smoothpaint_distance*paint_ramp*vel_rampproximity_falloffray_dirwave_factorwave_clampmax_velocitysmudge_strengthTYPE charucharshortushortintlongulongfloatdoubleint64_tuint64_tvoidLinkLinkDataListBasevec2svec2frctirctfIDPropertyDataIDPropertyIDLibraryFileDataPreviewImageIpoDriverObjectIpoCurveBPointBezTripleIpoKeyBlockKeyAnimDataTextLineTextMarkerTextPackedFileCameraImageUserSceneImageGPUTextureanimRenderResultMTexTexPluginTexCBDataColorBandEnvMapImBufPointDensityCurveMappingVoxelDataOceanTexbNodeTreeTexMappingColorMappingLampVolumeSettingsGameSettingsMaterialGroupVFontVFontDataMetaElemBoundBoxMetaBallNurbCharInfoTextBoxEditNurbGHashCurvePathSelBoxEditFontMeshMPolyMTexPolyMLoopMLoopUVMLoopColMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectEditMeshCustomDataMultiresMDeformWeightMFloatPropertyMIntPropertyMStringPropertyOrigSpaceFaceMDispsMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMRecastModifierDataMappingInfoModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataMaskModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataBevelModifierDataBMeshModifierDataSmokeModifierDataSmokeDomainSettingsSmokeFlowSettingsSmokeCollSettingsDisplaceModifierDataUVProjectModifierDataDecimateModifierDataSmoothModifierDataCastModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataClothModifierDataClothClothSimSettingsClothCollSettingsPointCacheCollisionModifierDataBVHTreeSurfaceModifierDataDerivedMeshBVHTreeFromMeshBooleanModifierDataMDefInfluenceMDefCellMeshDeformModifierDataParticleSystemModifierDataParticleSystemParticleInstanceModifierDataExplodeModifierDataMultiresModifierDataFluidsimModifierDataFluidsimSettingsShrinkwrapModifierDataSimpleDeformModifierDataShapeKeyModifierDataSolidifyModifierDataScrewModifierDataOceanModifierDataOceanOceanCacheWarpModifierDataWeightVGEditModifierDataWeightVGMixModifierDataWeightVGProximityModifierDataDynamicPaintModifierDataDynamicPaintCanvasSettingsDynamicPaintBrushSettingsRemeshModifierDataEditLattLatticebDeformGroupSculptSessionbActionbPosebGPdatabAnimVizSettingsbMotionPathBulletSoftBodyPartDeflectSoftBodyObHookDupliObjectRNGEffectorWeightsPTCacheExtraPTCacheMemPTCacheEditSBVertexBodyPointBodySpringSBScratchFluidVertexVelocityWorldBaseAviCodecDataQuicktimeCodecDataQuicktimeCodecSettingsFFMpegCodecDataAudioDataSceneRenderLayerImageFormatDataRenderDataRenderProfileGameDomeGameFramingRecastDataGameDataTimeMarkerPaintBrushImagePaintSettingsParticleBrushDataParticleEditSettingsSculptUvSculptVPaintTransformOrientationUnifiedPaintSettingsToolSettingsbStatsUnitSettingsPhysicsSettingsEditingSceneStatsDagForestMovieClipBGpicMovieClipUserRegionView3DRenderInfoRenderEngineViewDepthsSmoothViewStorewmTimerView3DSpaceLinkView2DSpaceInfoSpaceIpobDopeSheetSpaceButsSpaceSeqFileSelectParamsSpaceFileFileListwmOperatorFileLayoutSpaceOopsTreeStoreTreeStoreElemSpaceImageScopesHistogramSpaceNlaSpaceTextScriptSpaceScriptSpaceTimeCacheSpaceTimeSpaceNodeSpaceLogicConsoleLineSpaceConsoleSpaceUserPrefSpaceClipMovieClipScopesuiFontuiFontStyleuiStyleuiWidgetColorsuiWidgetStateColorsuiPanelColorsThemeUIThemeSpaceThemeWireColorbThemebAddonSolidLightUserDefbScreenScrVertScrEdgePanelPanelTypeuiLayoutScrAreaSpaceTypeARegionARegionTypeFileGlobalStripElemStripCropStripTransformStripColorBalanceStripProxyStripPluginSeqSequencebSoundMetaStackWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbActuatorSensorbDelaySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbArmatureSensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorSound3DbSoundActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorbTwoDFilterActuatorbParentActuatorbStateActuatorbArmatureActuatorbSteeringActuatorGroupObjectBonebArmaturebMotionPathVertbPoseChannelbIKParambItascbActionGroupSpaceActionbActionChannelbConstraintChannelbConstraintbConstraintTargetbPythonConstraintbKinematicConstraintbSplineIKConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbSizeLikeConstraintbSameVolumeConstraintbTransLikeConstraintbMinMaxConstraintbActionConstraintbLockTrackConstraintbDampTrackConstraintbFollowPathConstraintbStretchToConstraintbRigidBodyJointConstraintbClampToConstraintbChildOfConstraintbTransformConstraintbPivotConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbDistLimitConstraintbShrinkwrapConstraintbFollowTrackConstraintbCameraSolverConstraintbObjectSolverConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodePreviewbNodeuiBlockbNodeTypebNodeTreeExecbNodeSocketValueIntbNodeSocketValueFloatbNodeSocketValueBooleanbNodeSocketValueVectorbNodeSocketValueRGBANodeImageAnimNodeBlurDataNodeDBlurDataNodeBilateralBlurDataNodeHueSatNodeImageFileNodeChromaNodeTwoXYsNodeTwoFloatsNodeGeometryNodeVertexColNodeDefocusNodeScriptDictNodeGlareNodeTonemapNodeLensDistNodeColorBalanceNodeColorspillNodeTexBaseNodeTexSkyNodeTexImageNodeTexCheckerNodeTexEnvironmentNodeTexGradientNodeTexNoiseNodeTexVoronoiNodeTexMusgraveNodeTexWaveNodeTexMagicNodeShaderAttributeTexNodeOutputCurveMapPointCurveMapBrushCloneCustomDataLayerCustomDataExternalHairKeyParticleKeyBoidParticleBoidDataParticleSpringChildParticleParticleTargetParticleDupliWeightParticleDataSPHFluidSettingsParticleSettingsBoidSettingsParticleCacheKeyKDTreeParticleDrawDataLinkNodebGPDspointbGPDstrokebGPDframebGPDlayerReportListwmWindowManagerwmWindowwmKeyConfigwmEventwmSubWindowwmGesturewmKeyMapItemPointerRNAwmKeyMapDiffItemwmKeyMapwmOperatorTypeFModifierFMod_GeneratorFMod_FunctionGeneratorFCM_EnvelopeDataFMod_EnvelopeFMod_CyclesFMod_PythonFMod_LimitsFMod_NoiseFMod_SteppedDriverTargetDriverVarChannelDriverFPointFCurveAnimMapPairAnimMapperNlaStripNlaTrackKS_PathKeyingSetAnimOverrideIdAdtTemplateBoidRuleBoidRuleGoalAvoidBoidRuleAvoidCollisionBoidRuleFollowLeaderBoidRuleAverageSpeedBoidRuleFightBoidStateFLUID_3DWTURBULENCESpeakerMovieClipProxyMovieClipCacheMovieTrackingMovieTrackingTrackMovieTrackingMarkerMovieReconstructedCameraMovieTrackingCameraMovieTrackingSettingsMovieTrackingStabilizationMovieTrackingReconstructionMovieTrackingObjectMovieTrackingStatsDynamicPaintSurfacePaintSurfaceDataTLEN ldx \$88( $@ 0dT0L8X|lTh8 ,< T @ (`pplhht0h$@`|( xl4xthh`| LLpXXp 0Px0xD` @D h 88T,$X$p 8lTX(0`<x p( 4hX, 0p#H88&@`(, 4  x8TPLHLHlp\L\ DplXX (0(h `,h\TLLLDd`LLT` |TT <, ( ,@  `@@ ,d84@<`hhh0DX`h0D8\@8`H,@0lSTRC                 !"#$%&'()*+,-./012,-34567  89:;<=>,?@A;-BC DEFG !HIJK;LMNOP"""QRS# ##TUVW XYZ$[X\]"^"_`abcde fg%hi &!HjklmnopqrstuMvwx'(yz{|}~)!"*+,,%-A.x7/"   0A>1$>02)3lm4     1 56 7.@!H !"#$%&'()*+,-./0123456789:;<=>~{|}?@W'A8BM)/C1 2D4E6F7GHx9 IJKLM+: 1NOPQR;J!HSTUVWXYZ[\]^_5`lmabcdefghijklmnopqrstuWvwxyz{|}~M-H8B<=W>~!H<=SvH11-8BM?   @"A%BBBC  D!HC M>IJ !B" #$%5&'()*+,$%(+EEE-+./01234567/089:F;-G<=H>I?@ZJD!HC AHBCDEMKF G>HIJIJKLMNOPQ01RST U]AVWXYZ[\]^_`aLbMcd@e@f@g@hijklGmnoFpFqN/!HC M G>OrPsQtRuSvTwUxVyWzX{Y|Z}[~N\]^^^^^4IJI_V ST-X`%Y`WZO-QP)SRS[\ U)SabcdeZfgfh-ij jjhgi4W_W^^kl llS(yml.nlX  olplqlUrlESs lXtlulXv lXwlxlyz{| l.} l)X~lllhl.OWl l    ll(y  lWWWWWWTlWW l!"%|#l$S%&'4()*+,-#./012 3l45677l+789l:;<l=>?@XlA lBCDEFGHI lJDKLSMl l|NOPQRST lUVWXYZl[\]^_`abcdefghijklmnhol.pq5`rlst5uvwxyz.{|}~lxyz.{|}~lxyz.{|}~llS@Z!H./M GY|ExC!H%MC  S>IJjj E?@   %K       +  K ( !"#$%&'()*+,-./012.34?5678  9:; < =>?@ABCDE: F7GHIJKL M,NOPQRSTUVWXYZ[\]^_`abcdefghi6:jklmnopqrstuvwxyz{|}~}O4NNM4N!HTvSM-H8B        !"#$%&'()W*+,-./01X23456 789:;P ><?=>?@A BCDEFGHIJKxjLMNOP }QRSTUVWXYZ[\]^_`abcihdefghCBiDjkSlmWnopqrstuvwxyz{|}~$ WSZ$WW ]^_`bSW9 XW h? 7(yX$Y hU?      !"#$%&'()*+,-./0123456789W:;<=>?@ABC4DEFGH7(.!HI(JKLMNOPQRSH8BTUVWbX Y Z [ \ ]^_`abcdef  g)'Afh^_hij)klmnopqrsZtuvwxyzR{|}j~C3sZ}jRnN $>xS F ^_j)'A5^_ $X            X ! "XW #$ %&'NW(^_)*+8B8,-./R0 1Q2345678 9 ^_:;<f Sj=>Z?@A   BCDE  DFGHIJKLMN O P Q RSTUVWXYZ[\ ]^_`abcdefghijklimnopqrstuvwxyz{|}~wam     ,] !"#$%&'()3*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_1`abcdefgh(y(ijWklmnopqrstuv wxyz{|u}~ {|2o2 }!!!ZnsR"} #j(B$% &'(+D)))7$(%&'* "     +0++  U})M(y+*C+++, P ---+ +.Z/012 X 333 7444 7}5-55 z  V O      @                 6 ?777 O   'C! 888 " 9Z# $ :W;>% Z<& ' ( ) * =+ , >?- . @/ 0 SAZB- C1 2 SW3 D4 5 E6 7 8 FFF9 : ; < W G= +> ? H @ A B C D E F IG J$ SGGGGH I < 9 J  K= FK  L M L+MN  VO P Q R S T U NV W X Y Z [ \ ] O ^ WP,N_ o` P +Na b c d e QW(yR+ +S 9 f g Rh i j k T  VO WoU+l m WV Sn o p q r s W  VR>t u Xv w x y z 1 Y{ | 7 } W8 Z V~  [\Z  $]+^_4 5 %B ` 2 Z    B K KKKH 9   +,"% % MP V W  X aaa+ ?  bbb b%         Z%       c!H   b              dd                  e(ee   b e%e    e I            I  Wj      f g  F          hhh      b    ?   i  S jjjh MlkkkM lll     M  m mm    n$    o       %  SZp     q   Xr  s  t  uPv w   | W x  UVl m N y  z { |N! | " # $ % }  & ' ( ) * + , - . W~  /   0 1 2 3 4 5 6 7  8   9 :   9 :   9 :  ZcSBZFH; f< = > ff= /  ?  @ +SA B MN UVC D E F P G H I  ,l m J K L M N O P  Q R WS T U V W  X Y Z [ \ ] ^ _ %` > a V  I b %' Q S T Oc d e f g h i j k l m n o p q r s t u 8!Hv w x y d z I b { | } ~  l m l m R l m  {}    B(   i       Z X   X  "L}    Z                         DXZ h     & |                9 : K  K KK K KK K K K  :       5 >                S               ) " 5 - 3   i h W                  |    Z B^        %   G 7     ! " # $ 7+S. + 7% &  ' O(  ) # $ h* + ,  - . / 0 1 2 3 4 5 6 7 !H8 9 70 : v; < = > ? @ A B C D E F G H I  J K L M N O P Q R S T U V W X Y Z  V [ \ ] ^ _ `   a b c d    e f g h i j k l m hn o p q r s t u v w x y z 0./{ | } ~                 -? ?   ME 4   L M      %                         & w  G Y      x   yuv    X                X  ?      {   Y w                         m        2                                  2  } ! "  # $ % R   & ' }P G ( ) * S+ , - . l m ()4/ l m 0 1 2 3 $" 4 h5 6 7 |  '8 9 : ; < = ;> ? @ ;' A h <0B 4;C 8 D E F G BH I N J K ' L UVC D P G M N W O I   'P ; Q 8 C R S T R U 8 C ! V J W X Y Z [ \ ] !H^ +_ ` a  ^ _ b ^ +Ic   _ d ^ e > 7^  f g o h Si j k l m a  P_ n o p g q  r s t u v w x y z { | } y(x~ 9 ? ? ?  ** *      l     X             z x~ 4l      X{ x~    K  !H,        Ph z D  " +      3   z  z K     W     z            E                    Z            3                  V 0   ?         X     .                        X  4>X   ! " 1# 1$ %  & ' ( ) * ENDBconfclerk-0.6.0/src/sql/0000775000175000017500000000000012156157674014363 5ustar gregoagregoaconfclerk-0.6.0/src/sql/schedulexmlparser.h0000664000175000017500000000253112156157674020267 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef SCHEDULEXMLPARSER_H_ #define SCHEDULEXMLPARSER_H_ #include #include "sqlengine.h" class ScheduleXmlParser : public QObject { Q_OBJECT private: SqlEngine* sqlEngine; public: ScheduleXmlParser(SqlEngine* sqlEngine, QObject *aParent = NULL); public slots: void parseData(const QByteArray &aData, const QString& url, int conferenceId); signals: void progressStatus(int aStatus); void parsingScheduleBegin(); void parsingScheduleEnd(int conferenceId); }; #endif /* SCHEDULEXMLPARSER_H_ */ confclerk-0.6.0/src/sql/sql.pro0000664000175000017500000000055712156157674015713 0ustar gregoagregoainclude(../global.pri) TEMPLATE = lib TARGET = sql DESTDIR = ../bin CONFIG += static QT += sql xml QMAKE_CLEAN += ../bin/libsql.a # module dependencies LIBS += -L$$DESTDIR -lmvc -lorm INCLUDEPATH += ../mvc ../orm ../app DEPENDPATH += . HEADERS += sqlengine.h \ schedulexmlparser.h SOURCES += sqlengine.cpp \ schedulexmlparser.cpp confclerk-0.6.0/src/sql/schedulexmlparser.cpp0000664000175000017500000002105712156157674020626 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include #include #include "schedulexmlparser.h" #include "sqlengine.h" #include "../gui/errormessage.h" #include ScheduleXmlParser::ScheduleXmlParser(SqlEngine* sqlEngine, QObject *aParent): QObject(aParent),sqlEngine(sqlEngine) { } void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, int conferenceId) { QDomDocument document; QString xml_error; int xml_error_line; int xml_error_column; if (!document.setContent (aData, false, &xml_error, &xml_error_line, &xml_error_column)) { error_message("Could not parse schedule: " + xml_error + " at line " + QString("%1").arg(xml_error_line) + " column " + QString("%1").arg(xml_error_column)); return; } QDomElement scheduleElement = document.firstChildElement("schedule"); sqlEngine->beginTransaction(); QString conference_title; if (!scheduleElement.isNull()) { QDomElement conferenceElement = scheduleElement.firstChildElement("conference"); if (!conferenceElement.isNull()) { emit(parsingScheduleBegin()); QHash conference; conference["id"] = QString::number(conferenceId); // conference ID is assigned automatically if 0 conference["title"] = conferenceElement.firstChildElement("title").text(); conference["subtitle"] = conferenceElement.firstChildElement("subtitle").text(); conference["venue"] = conferenceElement.firstChildElement("venue").text(); conference["city"] = conferenceElement.firstChildElement("city").text(); conference["start"] = conferenceElement.firstChildElement("start").text(); // date conference["end"] = conferenceElement.firstChildElement("end").text(); // date conference["day_change"] = conferenceElement.firstChildElement("day_change").text(); // time conference["timeslot_duration"] = conferenceElement.firstChildElement("timeslot_duration").text(); // time conference["url"] = url; sqlEngine->addConferenceToDB(conference, conferenceId); conferenceId = conference["id"].toInt(); conference_title = conference["title"]; } // we need to get count of all events in order to emit 'progressStatus' signal int totalEventsCount = scheduleElement.elementsByTagName("event").count(); // parsing day elements int currentEvent = 0; // hold global idx of processed event QDomNodeList dayList = scheduleElement.elementsByTagName("day"); for (int i=0; i room; room["name"] = roomElement.attribute("name"); room["event_id"] = eventElement.attribute("id"); room["conference_id"] = QString::number(conferenceId,10); sqlEngine->addRoomToDB(room); // process event's nodes QHash event; event["id"] = eventElement.attribute("id");; event["conference_id"] = QString::number(conferenceId, 10); event["start"] = eventElement.firstChildElement("start").text(); // time eg. 10:00 event["date"] = dayElement.attribute("date"); // date eg. 2009-02-07 event["duration"] = eventElement.firstChildElement("duration").text(); // time eg. 00:30 event["room_name"] = eventElement.firstChildElement("room").text(); // string eg. "Janson" event["tag"] = eventElement.firstChildElement("tag").text(); // string eg. "welcome" event["title"] = eventElement.firstChildElement("title").text(); // string eg. "Welcome" event["subtitle"] = eventElement.firstChildElement("subtitle").text(); // string event["track"] = eventElement.firstChildElement("track").text(); // string eg. "Keynotes" event["type"] = eventElement.firstChildElement("type").text(); // string eg. "Podium" event["language"] = eventElement.firstChildElement("language").text(); // language eg. "English" event["abstract"] = eventElement.firstChildElement("abstract").text(); // string event["description"] = eventElement.firstChildElement("description").text(); // string sqlEngine->addEventToDB(event); // process persons' nodes QDomElement personsElement = eventElement.firstChildElement("persons"); QDomNodeList personList = personsElement.elementsByTagName("person"); for(int i = 0;i < personList.count();i++){ QHash person; person["id"] = personList.at(i).toElement().attribute("id"); person["name"] = personList.at(i).toElement().text(); person["event_id"] = eventElement.attribute("id"); person["conference_id"] = QString::number(conferenceId, 10); sqlEngine->addPersonToDB(person); } // process links' nodes QDomElement linksElement = eventElement.firstChildElement("links"); QDomNodeList linkList = linksElement.elementsByTagName("link"); for(int i = 0;i < linkList.count();i++){ QHash link; link["name"] = linkList.at(i).toElement().text(); link["url"] = linkList.at(i).toElement().attribute("href"); link["event_id"] = eventElement.attribute("id"); link["conference_id"] = QString::number(conferenceId, 10); sqlEngine->addLinkToDB(link); } // emit signal to inform the user about the current status (how many events are parsed so far - expressed in %) int status = currentEvent * 100 / totalEventsCount; progressStatus(status); } // parsing event elements } } // parsing room elements } // parsing day elements } // schedule element sqlEngine->commitTransaction(); if (!conference_title.isNull()) { emit parsingScheduleEnd(conferenceId); } else { error_message("Could not parse schedule"); } } confclerk-0.6.0/src/sql/sqlengine.cpp0000664000175000017500000004166612156157674017071 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include #include #include #include #include #include #include #include "sqlengine.h" #include "track.h" #include "conference.h" #include const QString DATE_FORMAT ("yyyy-MM-dd"); const QString TIME_FORMAT ("hh:mm"); SqlEngine::SqlEngine(QObject *aParent): QObject(aParent) { QDir dbPath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); dbFilename = dbPath.absoluteFilePath("ConfClerk.sqlite"); } SqlEngine::~SqlEngine() { } void SqlEngine::open() { // we may have to create the directory of the database QFileInfo dbFilenameInfo(dbFilename); QDir cwd; cwd.mkpath(dbFilenameInfo.absolutePath()); // We don't have to handle errors because in worst case, opening the database will fail // and db.isOpen() returns false. db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(dbFilename); db.open(); } int SqlEngine::dbSchemaVersion() { QSqlQuery query(db); if (!query.exec("PRAGMA user_version")) { emitSqlQueryError(query); return -2; } query.first(); int version = query.value(0).toInt(); if (version == 0) { // check whether the tables are existing if (!query.exec("select count(*) from sqlite_master where name='CONFERENCE'")) { emitSqlQueryError(query); return -2; } query.first(); if (query.value(0).toInt() == 1) return 0; // tables are existing return -1; // database seems to be empty (or has other tables) } return version; } bool SqlEngine::updateDbSchemaVersion000To001() { return applySqlFile(":/dbschema000to001.sql"); } bool SqlEngine::createCurrentDbSchema() { return applySqlFile(":/dbschema001.sql"); } bool SqlEngine::createOrUpdateDbSchema() { int version = dbSchemaVersion(); switch (version) { case -2: // the error has already been emitted by the previous function return false; case -1: // empty database return createCurrentDbSchema(); case 0: // db schema version 0 return updateDbSchemaVersion000To001(); case 1: // current schema return true; default: // unsupported schema emit dbError(tr("Unsupported database schema version %1.").arg(version)); } return false; } bool SqlEngine::applySqlFile(const QString sqlFile) { QFile file(sqlFile); file.open(QIODevice::ReadOnly | QIODevice::Text); QString allSqlStatements = file.readAll(); QSqlQuery query(db); foreach(QString sql, allSqlStatements.split(";")) { if (sql.trimmed().isEmpty()) // do not execute empty queries like the last character from create_tables.sql continue; if (!query.exec(sql)) { emitSqlQueryError(query); return false; } } return true; } void SqlEngine::addConferenceToDB(QHash &aConference, int conferenceId) { QSqlQuery query(db); if (conferenceId <= 0) // insert conference { query.prepare("INSERT INTO CONFERENCE (title,url,subtitle,venue,city,start,end," "day_change,timeslot_duration,active) " " VALUES (:title,:url,:subtitle,:venue,:city,:start,:end," ":day_change,:timeslot_duration,:active)"); foreach (QString prop_name, (QList() << "title" << "url" << "subtitle" << "venue" << "city")) { query.bindValue(QString(":") + prop_name, aConference[prop_name]); } query.bindValue(":start", QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0))); query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0))); query.bindValue(":active", 1); query.exec(); emitSqlQueryError(query); aConference["id"] = query.lastInsertId().toString(); // 'id' is assigned automatically } else // update conference { query.prepare("UPDATE CONFERENCE set title=:title, url=:url, subtitle=:subtitle, venue=:venue, city=:city, start=:start, end=:end," "day_change=:day_change, timeslot_duration=:timeslot_duration, active=:active " "WHERE id=:id"); foreach (QString prop_name, (QList() << "title" << "url" << "subtitle" << "venue" << "city")) { query.bindValue(QString(":") + prop_name, aConference[prop_name]); } query.bindValue(":start", QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0))); query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0))); query.bindValue(":active", 1); query.bindValue(":id", conferenceId); query.exec(); emitSqlQueryError(query); aConference["id"] = QVariant(conferenceId).toString(); } } void SqlEngine::addEventToDB(QHash &aEvent) { int conferenceId = aEvent["conference_id"].toInt(); Conference conference = Conference::getById(conferenceId); // insert event track to table and get track id Track track; int trackId; QString trackName = aEvent["track"]; try { track = Track::retrieveByName(conferenceId, trackName); trackId = track.id(); } catch (OrmNoObjectException &e) { track.setConference(conferenceId); track.setName(trackName); trackId = track.insert(); } QDate startDate = QDate::fromString(aEvent["date"], DATE_FORMAT); QTime startTime = QTime::fromString(aEvent["start"], TIME_FORMAT); // consider day_change (note that if day_change is e.g. at 04:00 AM, an event starting at 02:00 AM has the previous date in the XML file) if (startTime < conference.dayChangeTime()) startDate = startDate.addDays(1); QDateTime startDateTime; startDateTime.setTimeSpec(Qt::UTC); startDateTime = QDateTime(startDate, startTime, Qt::UTC); bool event_exists = false; { QSqlQuery check_event_query; check_event_query.prepare("SELECT * FROM EVENT WHERE xid_conference = :xid_conference AND id = :id"); check_event_query.bindValue(":xid_conference", aEvent["conference_id"]); check_event_query.bindValue(":id", aEvent["id"]); if (!check_event_query.exec()) { qWarning() << "check event failed, conference id:" << aEvent["xid_conference"] << "event id:" << aEvent["id"] << "error:" << check_event_query.lastError() ; return; } if (check_event_query.isActive() and check_event_query.isSelect() and check_event_query.next()) { event_exists = true; } } QSqlQuery result; if (event_exists) { result.prepare("UPDATE EVENT SET" " start = :start" ", duration = :duration" ", xid_track = :xid_track" ", type = :type" ", language = :language" ", tag = :tag" ", title = :title" ", subtitle = :subtitle" ", abstract = :abstract" ", description = :description" " WHERE id = :id AND xid_conference = :xid_conference"); } else { result.prepare("INSERT INTO EVENT " " (xid_conference, id, start, duration, xid_track, type, " " language, tag, title, subtitle, abstract, description) " " VALUES (:xid_conference, :id, :start, :duration, :xid_track, :type, " ":language, :tag, :title, :subtitle, :abstract, :description)"); } result.bindValue(":xid_conference", aEvent["conference_id"]); result.bindValue(":start", QString::number(startDateTime.toTime_t())); result.bindValue(":duration", -QTime::fromString(aEvent["duration"],TIME_FORMAT).secsTo(QTime(0,0))); result.bindValue(":xid_track", trackId); static const QList props = QList() << "id" << "type" << "language" << "tag" << "title" << "subtitle" << "abstract" << "description"; foreach (QString prop_name, props) { result.bindValue(QString(":") + prop_name, aEvent[prop_name]); } if (!result.exec()) { qWarning() << "event insert/update failed:" << result.lastError(); } } void SqlEngine::addPersonToDB(QHash &aPerson) { QSqlQuery query(db); query.prepare("INSERT INTO PERSON (xid_conference,id,name) VALUES (:xid_conference, :id, :name)"); query.bindValue(":xid_conference", aPerson["conference_id"]); query.bindValue(":id", aPerson["id"]); query.bindValue(":name", aPerson["name"]); query.exec(); // TODO some queries fail due to the unique key constraint // if (!query.exec()) qDebug() << "SQL query 'insert into person' failed: " << query.lastError(); query = QSqlQuery(db); query.prepare("INSERT INTO EVENT_PERSON (xid_conference,xid_event,xid_person) VALUES (:xid_conference, :xid_event, :xid_person)"); query.bindValue(":xid_conference", aPerson["conference_id"]); query.bindValue(":xid_event", aPerson["event_id"]); query.bindValue(":xid_person", aPerson["id"]); query.exec(); // TODO some queries fail due to the unique key constraint // if (!query.exec()) qDebug() << "SQL query 'insert into event_person' failed: " << query.lastError(); } void SqlEngine::addRoomToDB(QHash &aRoom) { QSqlQuery query(db); query.prepare("SELECT id FROM ROOM WHERE xid_conference=:conference_id and name=:name"); query.bindValue(":conference_id", aRoom["conference_id"]); query.bindValue(":name", aRoom["name"]); query.exec(); emitSqlQueryError(query); // now we have to check whether ROOM record with 'name' exists or not, // - if it doesn't exist yet, then we have to add that record to 'ROOM' table // and assign autoincremented 'id' to aRoom // - if it exists, then we need to get its 'id' and assign it to aRoom aRoom["id"] = ""; if(query.next()) // ROOM record with 'name' already exists: we need to get its 'id' { aRoom["id"] = query.value(0).toString(); } else // ROOM record doesn't exist yet, need to create it { query = QSqlQuery(db); query.prepare("INSERT INTO ROOM (xid_conference,name) VALUES (:xid_conference, :name)"); query.bindValue(":xid_conference", aRoom["conference_id"]); query.bindValue(":xid_name", aRoom["name"]); query.exec(); emitSqlQueryError(query); aRoom["id"]= query.lastInsertId().toString(); // 'id' is assigned automatically //LOG_AUTOTEST(query); } // remove previous conference/room records; room names might have changed query = QSqlQuery(db); query.prepare("DELETE FROM EVENT_ROOM WHERE xid_conference=:conference_id AND xid_event=:event_id"); query.bindValue(":conference_id", aRoom["conference_id"]); query.bindValue(":event_id", aRoom["event_id"]); query.exec(); emitSqlQueryError(query); // and insert new ones query = QSqlQuery(db); query.prepare("INSERT INTO EVENT_ROOM (xid_conference,xid_event,xid_room) VALUES (:conference_id, :event_id, :room_id)"); query.bindValue(":conference_id", aRoom["conference_id"]); query.bindValue(":event_id", aRoom["event_id"]); query.bindValue(":room_id", aRoom["id"]); query.exec(); emitSqlQueryError(query); } void SqlEngine::addLinkToDB(QHash &aLink) { //TODO: check if the link doesn't exist before inserting QSqlQuery query(db); query.prepare("INSERT INTO LINK (xid_event, xid_conference, name, url) VALUES (:xid_event, :xid_conference, :name, :url)"); query.bindValue(":xid_event", aLink["event_id"]); query.bindValue(":xid_conference", aLink["conference_id"]); query.bindValue(":name", aLink["name"]); query.bindValue(":url", aLink["url"]); query.exec(); emitSqlQueryError(query); } bool SqlEngine::searchEvent(int aConferenceId, const QHash &aColumns, const QString &aKeyword) { if (aColumns.empty()) return false; // DROP QSqlQuery query(db); query.exec("DROP TABLE IF EXISTS SEARCH_EVENT"); emitSqlQueryError(query); // CREATE query.exec("CREATE TEMP TABLE SEARCH_EVENT ( xid_conference INTEGER NOT NULL, id INTEGER NOT NULL )"); emitSqlQueryError(query); // INSERT QString sql = QString("INSERT INTO SEARCH_EVENT ( xid_conference, id ) " "SELECT DISTINCT EVENT.xid_conference, EVENT.id FROM EVENT "); if( aColumns.contains("ROOM") ){ sql += "LEFT JOIN EVENT_ROOM ON ( EVENT.xid_conference = EVENT_ROOM.xid_conference AND EVENT.id = EVENT_ROOM.xid_event ) "; sql += "LEFT JOIN ROOM ON ( EVENT_ROOM.xid_room = ROOM.id ) "; } if( aColumns.contains("PERSON") ){ sql += "LEFT JOIN EVENT_PERSON ON ( EVENT.xid_conference = EVENT_PERSON.xid_conference AND EVENT.id = EVENT_PERSON.xid_event ) "; sql += "LEFT JOIN PERSON ON ( EVENT_PERSON.xid_person = PERSON.id ) "; } sql += QString("WHERE EVENT.xid_conference = %1 AND (").arg( aConferenceId ); QStringList searchKeywords = aKeyword.trimmed().split(QRegExp("\\s+")); QStringList whereAnd; for (int i=0; i < searchKeywords.count(); i++) { QStringList whereOr; foreach (QString table, aColumns.uniqueKeys()) { foreach (QString column, aColumns.values(table)){ whereOr.append(QString("%1.%2 LIKE '\%' || :%1%2%3 || '\%'").arg(table).arg(column).arg(i)); } } whereAnd.append(whereOr.join(" OR ")); } sql += whereAnd.join(") AND ("); sql += QString(")"); query.prepare(sql); for (int i = 0; i != searchKeywords.size(); ++i) { QString keyword = searchKeywords[i]; foreach (QString table, aColumns.uniqueKeys()) { foreach (QString column, aColumns.values(table)) { query.bindValue(QString(":%1%2%3").arg(table).arg(column).arg(i), keyword ); } } } bool success = query.exec(); emitSqlQueryError(query); return success; } bool SqlEngine::beginTransaction() { QSqlQuery query(db); bool success = query.exec("BEGIN IMMEDIATE TRANSACTION"); emitSqlQueryError(query); return success; } bool SqlEngine::commitTransaction() { QSqlQuery query(db); bool success = query.exec("COMMIT"); emitSqlQueryError(query); return success; } bool SqlEngine::deleteConference(int id) { QSqlQuery query(db); bool success = query.exec("BEGIN IMMEDIATE TRANSACTION"); emitSqlQueryError(query); QStringList sqlList; sqlList << "DELETE FROM LINK WHERE xid_conference = ?" << "DELETE FROM EVENT_ROOM WHERE xid_conference = ?" << "DELETE FROM EVENT_PERSON WHERE xid_conference = ?" << "DELETE FROM EVENT WHERE xid_conference = ?" << "DELETE FROM ROOM WHERE xid_conference = ?" << "DELETE FROM PERSON WHERE xid_conference = ?" << "DELETE FROM TRACK WHERE xid_conference = ?" << "DELETE FROM CONFERENCE WHERE id = ?"; foreach (const QString& sql, sqlList) { query.prepare(sql); query.bindValue(0, id); success &= query.exec(); emitSqlQueryError(query); } success &= query.exec("COMMIT"); emitSqlQueryError(query); return success; } void SqlEngine::emitSqlQueryError(const QSqlQuery &query) { QSqlError error = query.lastError(); if (error.type() == QSqlError::NoError) return; emit dbError(error.text()); } confclerk-0.6.0/src/sql/sqlengine.h0000664000175000017500000000621212156157674016522 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef SQLENGINE_H #define SQLENGINE_H #include #include #include class SqlEngine : public QObject { Q_OBJECT public: QString dbFilename; ///< database filename including path QSqlDatabase db; ///< this may be private one day... SqlEngine(QObject *aParent = NULL); ~SqlEngine(); // Open/Close void open(); ///< emits a database error if failed. bool isOpen() const {return db.isOpen();} void close() {db.close();} // Schema version /// returns the "user_version" of the database schema /// we return -1 for an empty database /// the database has to be open /// returns -2 if an error occurs and emits the error message int dbSchemaVersion(); /// called by createOrUpdateDbSchema. Do not use directly. true for success. bool updateDbSchemaVersion000To001(); /// called by createOrUpdateDbSchma. Do not use directly. true for success. bool createCurrentDbSchema(); /// creates the current database schema if an empty database is found, /// otherwise updates the schema if an old one is found. true for success. bool createOrUpdateDbSchema(); /// Applies an SQL file bool applySqlFile(const QString sqlFile); // if a conferneceId != 0 is given, the confernce is updated instead of inserted. void addConferenceToDB(QHash &aConference, int conferenceId); void addEventToDB(QHash &aEvent); void addPersonToDB(QHash &aPerson); void addLinkToDB(QHash &aLink); void addRoomToDB(QHash &aRoom); bool deleteConference(int id); bool beginTransaction(); bool commitTransaction(); /// search Events for .... returns true if success bool searchEvent(int conferenceId, const QHash &columns, const QString &keyword); private: static QString login(const QString &aDatabaseType, const QString &aDatabaseName); /// emits a possible error message as signal. Does nothing if there was not last error void emitSqlQueryError(const QSqlQuery& query); signals: /// emitted when a database errors occur void dbError(const QString& message); }; #endif /* SQLENGINE_H */ confclerk-0.6.0/src/app/0000775000175000017500000000000012156157674014344 5ustar gregoagregoaconfclerk-0.6.0/src/app/app.pro0000664000175000017500000000140012156157674015641 0ustar gregoagregoainclude(../global.pri) TEMPLATE = app TARGET = confclerk DESTDIR = ../bin QT += sql xml network CONFIG(maemo5) { QT += maemo5 } # module dependencies LIBS += -L$$DESTDIR -lgui -lmvc -lsql INCLUDEPATH += ../gui ../sql ../mvc ../orm DEPENDPATH += . ../gui POST_TARGETDEPS += $$DESTDIR/libmvc.a $$DESTDIR/libgui.a $$DESTDIR/libsql.a maemo { LIBS += -L$$DESTDIR -lqalarm -lalarm INCLUDEPATH += ../alarm DEPENDPATH += ../alarm POST_TARGETDEPS += $$DESTDIR/libqalarm.a } HEADERS += appsettings.h \ application.h SOURCES += main.cpp \ application.cpp \ appsettings.cpp RESOURCES += ../icons.qrc \ ../db.qrc \ ../../data/data.qrc # instalation related PREFIX = /usr/bin INSTALLS = target target.path = $$PREFIX confclerk-0.6.0/src/app/appsettings.h0000664000175000017500000000271412156157674017062 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef APPSETTINGS_H #define APPSETTINGS_H #include #include class AppSettings { private: AppSettings() {} static QSettings mSettings; public: static bool contains(const QString &aKey); static QString proxyAddress(); static quint16 proxyPort(); static bool isDirectConnection(); static void setProxyAddress(const QString &aAddress); static void setProxyPort(const quint16 aPort); static void setDirectConnection(bool aDirectConnection); static int preEventAlarmSec() {return 60*15;} ///< seconds that alarm should ring before an event starts }; #endif /* APPSETTINGS_H */ confclerk-0.6.0/src/app/main.cpp0000664000175000017500000000323412156157674015776 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "mainwindow.h" #include "sqlengine.h" #include "eventdialog.h" #include "application.h" int main(int argc, char *argv[]) { Q_INIT_RESOURCE(icons); Q_INIT_RESOURCE(db); Q_INIT_RESOURCE(data); Application a(argc, argv); Application::setWindowIcon(QIcon(":/confclerk.svg")); // needed by QDesktopServices QCoreApplication::setOrganizationName("Toastfreeware"); QCoreApplication::setApplicationName("ConfClerk"); QCoreApplication::setApplicationVersion(VERSION); MainWindow window; // If we were started with the parameters confernceid and eventid, show the corresponding event (alarm) if (argc >= 3) { QString conferenceIdStr = argv[1]; QString eventIdStr = argv[2]; EventDialog dialog(conferenceIdStr.toInt(), eventIdStr.toInt(), &window); dialog.exec(); } window.show(); return a.exec(); } confclerk-0.6.0/src/app/application.cpp0000664000175000017500000000255612156157674017363 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "application.h" #include "errormessage.h" #include "ormrecord.h" // if the application uses exceptions, // there is always a possibility that some will leak uncached from event handler // crashing the application is too big punishment for it bool Application::notify(QObject* receiver, QEvent* event) { try { return QApplication::notify(receiver, event); } catch (OrmException& e) { error_message("UNCAUGHT OrmException: " + e.text()); return false; } catch (...) { error_message("UNCAUGHT EXCEPTION: unknown"); return false; } } confclerk-0.6.0/src/app/application.h0000664000175000017500000000212412156157674017017 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef APPLICATION_H #define APPLICATION_H #include class Application : public QApplication { Q_OBJECT public: Application(int& argc, char** argv) : QApplication(argc, argv) { } virtual ~Application() { } virtual bool notify(QObject* receiver, QEvent* event); }; #endif confclerk-0.6.0/src/app/appsettings.cpp0000664000175000017500000000342412156157674017414 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "appsettings.h" const QString PROXY_ADDRESS_SETTING ("proxyAddress"); const QString PROXY_PORT_SETTING ("proxyPort"); const QString PROXY_ISDIRECT_SETTING ("proxyIsDirectConnection"); QSettings AppSettings::mSettings("Toastfreeware", "ConfClerk"); QString AppSettings::proxyAddress() { return mSettings.value(PROXY_ADDRESS_SETTING).toString(); } quint16 AppSettings::proxyPort() { return mSettings.value(PROXY_PORT_SETTING).toUInt(); } bool AppSettings::isDirectConnection() { return mSettings.value(PROXY_ISDIRECT_SETTING).toBool(); } void AppSettings::setProxyAddress(const QString &aAddress) { mSettings.setValue(PROXY_ADDRESS_SETTING, aAddress); } void AppSettings::setProxyPort(const quint16 aPort) { mSettings.setValue(PROXY_PORT_SETTING, aPort); } void AppSettings::setDirectConnection(bool aDirectConnection) { mSettings.setValue(PROXY_ISDIRECT_SETTING, aDirectConnection); } bool AppSettings::contains(const QString &aKey) { return mSettings.contains(aKey); } confclerk-0.6.0/src/test/0000775000175000017500000000000012156157674014543 5ustar gregoagregoaconfclerk-0.6.0/src/test/gui/0000775000175000017500000000000012156157674015327 5ustar gregoagregoaconfclerk-0.6.0/src/test/test.pro0000664000175000017500000000055712156157674016253 0ustar gregoagregoaTEMPLATE = app TARGET = test DESTDIR = ../bin CONFIG += qtestlib console QT += sql # module dependencies LIBS += -L$$DESTDIR -lgui -lmvc INCLUDEPATH += ../gui ../mvc ../orm DEPENDPATH += . ../gui ../mvc ../orm POST_TARGETDEPS += $$DESTDIR/libmvc.a $$DESTDIR/libgui.a $$DESTDIR/liborm.a SOURCES += main.cpp \ mvc/EventTest.cpp HEADERS += \ mvc/EventTest.h confclerk-0.6.0/src/test/main.cpp0000664000175000017500000000173012156157674016174 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include #include "mvc/eventtest.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); EventTest eventTest; QTest::qExec(&eventTest, argc, argv); } confclerk-0.6.0/src/test/mvc/0000775000175000017500000000000012156157674015330 5ustar gregoagregoaconfclerk-0.6.0/src/test/mvc/eventtest.h0000664000175000017500000000213112156157674017517 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef EVENTTEST_H #define EVENTTEST_H #include class EventTest : public QObject { Q_OBJECT private slots: void initTestCase(); void getById(); void getByDate(); void storingValues(); void hydrate(); void columnsForSelect(); void selectQuery(); }; #endif // EVENTTEST_H confclerk-0.6.0/src/test/mvc/eventtest.cpp0000664000175000017500000000602512156157674020060 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "eventtest.h" #include #include #include #include "event.h" void EventTest::initTestCase() { // Connect to the test database. Ask Mr. Pavelka to generate one for you :) QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("ConfClerk-test.sqlite"); QVERIFY(db.open()); } void EventTest::getById() { Event event = Event::getById(500, 1); QCOMPARE(event.id(), 500); QCOMPARE(event.start(), QDateTime(QDate(2009, 2, 7), QTime(11, 30, 0), Qt::UTC)); QCOMPARE(event.trackId(), 123); // !!! TODO: typeId and languageId QCOMPARE(event.type(), QString("Podium")); QCOMPARE(event.language(), QString("English")); } void EventTest::getByDate() { QCOMPARE(Event::getByDate(QDate(2009, 2, 7), 1).count(), 127); QCOMPARE(Event::getByDate(QDate(2009, 2, 8), 1).count(), 154); } void EventTest::storingValues() { Event event; event.setId(10); event.setConferenceId(20); event.setStart(QDateTime::fromString("Sat Feb 7 11:30:00 2009")); event.setDuration(30); event.setTrackId(40); event.setType(QString("type")); event.setLanguage(QString("language")); QCOMPARE(event.id(), 10); QCOMPARE(event.conferenceId(), 20); QCOMPARE(event.start(), QDateTime::fromString("Sat Feb 7 11:30:00 2009")); QCOMPARE(event.duration(), 30); QCOMPARE(event.trackId(), 40); QCOMPARE(event.type(), QString("type")); QCOMPARE(event.language(), QString("language")); } void EventTest::hydrate() { QSqlRecord record; record.append(QSqlField("duration", QVariant::Int)); record.append(QSqlField("id", QVariant::Int)); record.setValue(0, 10); record.setValue(1, 20); Event event = Event::hydrate(record); QCOMPARE(event.id(), 20); QCOMPARE(event.duration(), 10); } void EventTest::columnsForSelect() { QCOMPARE(Event::columnsForSelect(), QString("id,xid_conference,start,duration,xid_track,type,language")); QCOMPARE(Event::columnsForSelect("t0"), QString("t0.id,t0.xid_conference,t0.start,t0.duration,t0.xid_track,t0.type,t0.language")); } void EventTest::selectQuery() { QCOMPARE(Event::selectQuery(), QString("SELECT id,xid_conference,start,duration,xid_track,type,language FROM event ")); } confclerk-0.6.0/src/alarm/0000775000175000017500000000000012156157674014660 5ustar gregoagregoaconfclerk-0.6.0/src/alarm/alarm.cpp0000664000175000017500000000746412156157674016473 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "alarm.h" #include #include #include #include int Alarm::addAlarm(int conferenceId, int eventId, QString eventTitle, const QDateTime &alarmDateTime) { cookie_t alarmCookie = 0; alarm_event_t *alarmEvent = 0; alarm_action_t *alarmAction = 0; /* Create alarm event structure and set application identifier */ alarmEvent = alarm_event_create(); alarm_event_set_alarm_appid(alarmEvent, APPID); // message alarm_event_set_title(alarmEvent, "ConfClerk"); alarm_event_set_message(alarmEvent, eventTitle.toLocal8Bit().data()); // for deleting purposes alarm_event_set_attr_int(alarmEvent, "conferenceId", conferenceId); alarm_event_set_attr_int(alarmEvent, "eventId", eventId); /* Use absolute time triggering */ QDateTime local(alarmDateTime); local.setTimeSpec(Qt::LocalTime); alarmEvent->alarm_time = local.toTime_t(); alarmEvent->flags = ALARM_EVENT_BOOT; /* Add exec command action */ alarmAction = alarm_event_add_actions(alarmEvent, 1); alarm_action_set_label(alarmAction, "ConfClerk"); QString command = QFileInfo(*qApp->argv()).absoluteFilePath() + QString(" %1 %2").arg(conferenceId).arg(eventId); alarm_action_set_exec_command(alarmAction, command.toLocal8Bit().data()); alarmAction->flags |= ALARM_ACTION_TYPE_EXEC; alarmAction->flags |= ALARM_ACTION_WHEN_RESPONDED; alarmAction->flags |= ALARM_ACTION_EXEC_ADD_COOKIE; // adds assigned cookie at the end of command string /* Add stop button action */ alarmAction = alarm_event_add_actions(alarmEvent, 1); alarm_action_set_label(alarmAction, "Stop"); alarmAction->flags |= ALARM_ACTION_WHEN_RESPONDED; alarmAction->flags |= ALARM_ACTION_TYPE_NOP; /* Add snooze button action */ alarmAction = alarm_event_add_actions(alarmEvent, 1); alarm_action_set_label(alarmAction, "Snooze"); alarmAction->flags |= ALARM_ACTION_WHEN_RESPONDED; alarmAction->flags |= ALARM_ACTION_TYPE_SNOOZE; /* Send the alarm to alarmd */ alarmCookie = alarmd_event_add(alarmEvent); /* Free all dynamic memory associated with the alarm event */ alarm_event_delete(alarmEvent); return alarmCookie; } void Alarm::deleteAlarm(int conferenceId, int eventId) { cookie_t *alarmList = 0; cookie_t alarmCookie = 0; alarm_event_t *alarmEvent = 0; // query the APPID's list of alarms if( (alarmList = alarmd_event_query(0,0, 0,0, APPID)) != 0) { // query OK for (int i = 0; (alarmCookie = alarmList[i]) != 0; ++i ) { // get the event for specified alarm cookie (alarmId) alarmEvent = alarmd_event_get(alarmCookie); Q_ASSERT(alarmEvent); bool found = (conferenceId == alarm_event_get_attr_int(alarmEvent, "conferenceId", -1) && eventId == alarm_event_get_attr_int(alarmEvent, "eventId", -1)); if (found) alarmd_event_del(alarmCookie); // delete cookie alarm_event_delete(alarmEvent); if (found) break; } } free(alarmList); } confclerk-0.6.0/src/alarm/alarm.h0000664000175000017500000000231412156157674016125 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef ALARM_H #define ALARM_H #include #include extern "C" { #include "alarmd/libalarm.h" } #define APPID "confclerk-alarm" class Alarm : public QObject { Q_OBJECT public: Alarm() {} ~Alarm() {} int addAlarm(int conferenceId, int eventId, QString eventTitle, const QDateTime& alarmDateTime); void deleteAlarm(int conferenceId, int eventId); }; #endif /* ALARM_H */ confclerk-0.6.0/src/alarm/alarm.pro0000664000175000017500000000042112156157674016473 0ustar gregoagregoaTEMPLATE = lib TARGET = qalarm DESTDIR = ../bin CONFIG += static QT += sql QMAKE_CLEAN += ../bin/libqalarm.a # module dependencies LIBS += -lalarm DEPENDPATH += . HEADERS += alarm.h \ SOURCES += alarm.cpp \ INCLUDEPATH += ../gui \ ../mvc \ ../orm \ ../sql confclerk-0.6.0/src/dbschema001.sql0000664000175000017500000000515612156157674016303 0ustar gregoagregoaBEGIN TRANSACTION; CREATE TABLE conference ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title VARCHAR NOT NULL, subtitle VARCHAR, venue VARCHAR, city VARCHAR, start INTEGER NOT NULL, -- timezone-less timestamp (Unix Epoch) end INTEGER NOT NULL, -- timezone-less timestamp (Unix Epoch) day_change INTEGER, timeslot_duration INTEGER, active INTEGER DEFAULT 0, url VARCHAR ); CREATE TABLE track ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, UNIQUE (xid_conference, name) ); CREATE TABLE room ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, picture VARCHAR, UNIQUE (xid_conference, name) ); CREATE TABLE person ( id INTEGER NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, PRIMARY KEY (id, xid_conference) ); CREATE TABLE event ( xid_conference INTEGER NOT NULL REFERENCES conference(id), id INTEGER NOT NULL, start INTEGER NOT NULL, -- timezone-less timestamp (Unix Epoch) duration INTEGER NOT NULL, -- duration of the event in seconds xid_track INTEGER NOT NULL REFERENCES track(id), type VARCHAR, language VARCHAR, tag VARCHAR, title VARCHAR NOT NULL, subtitle VARCHAR, abstract VARCHAR, description VARCHAR, favourite INTEGER DEFAULT 0, alarm INTEGER DEFAULT 0, PRIMARY KEY (xid_conference, id) ); CREATE TABLE event_person ( xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, xid_person INTEGER NOT NULL, UNIQUE (xid_conference, xid_event, xid_person ) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id), FOREIGN KEY(xid_conference, xid_person) REFERENCES person(xid_conference, id) ); CREATE TABLE event_room ( xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, xid_room INTEGER NOT NULL, UNIQUE (xid_conference, xid_event, xid_room) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id), FOREIGN KEY(xid_conference, xid_room) REFERENCES room(xid_conference, id) ); CREATE TABLE link ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, name VARCHAR, url VARCHAR NOT NULL, UNIQUE (xid_conference, xid_event , url) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id) ); PRAGMA user_version=1; COMMIT; confclerk-0.6.0/src/dbschema000to001.sql0000664000175000017500000000705612156157674017067 0ustar gregoagregoaBEGIN TRANSACTION; ALTER TABLE conference RENAME TO conference_old; ALTER TABLE track RENAME TO track_old; ALTER TABLE room RENAME TO room_old; ALTER TABLE person RENAME TO person_old; ALTER TABLE event RENAME TO event_old; ALTER TABLE event_person RENAME TO event_person_old; ALTER TABLE event_room RENAME TO event_room_old; ALTER TABLE link RENAME TO link_old; CREATE TABLE conference ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title VARCHAR NOT NULL, subtitle VARCHAR, venue VARCHAR, city VARCHAR, start INTEGER NOT NULL, -- timezone-less timestamp (Unix Epoch) end INTEGER NOT NULL, -- timezone-less timestamp (Unix Epoch) day_change INTEGER, timeslot_duration INTEGER, active INTEGER DEFAULT 0, url VARCHAR ); CREATE TABLE track ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, UNIQUE (xid_conference, name) ); CREATE TABLE room ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, picture VARCHAR, UNIQUE (xid_conference, name) ); CREATE TABLE person ( id INTEGER NOT NULL, xid_conference INTEGER NOT NULL REFERENCES conference(id), name VARCHAR NOT NULL, PRIMARY KEY (id, xid_conference) ); CREATE TABLE event ( xid_conference INTEGER NOT NULL REFERENCES conference(id), id INTEGER NOT NULL, start INTEGER NOT NULL, duration INTEGER NOT NULL, -- duration of the event in seconds xid_track INTEGER NOT NULL REFERENCES track(id), type VARCHAR, language VARCHAR, tag VARCHAR, title VARCHAR NOT NULL, subtitle VARCHAR, abstract VARCHAR, description VARCHAR, favourite INTEGER DEFAULT 0, alarm INTEGER DEFAULT 0, PRIMARY KEY (xid_conference, id) ); CREATE TABLE event_person ( xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, xid_person INTEGER NOT NULL, UNIQUE (xid_conference, xid_event, xid_person ) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id), FOREIGN KEY(xid_conference, xid_person) REFERENCES person(xid_conference, id) ); CREATE TABLE event_room ( xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, xid_room INTEGER NOT NULL, UNIQUE (xid_conference, xid_event, xid_room) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id), FOREIGN KEY(xid_conference, xid_room) REFERENCES room(xid_conference, id) ); CREATE TABLE link ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, xid_conference INTEGER NOT NULL, xid_event INTEGER NOT NULL, name VARCHAR, url VARCHAR NOT NULL, UNIQUE (xid_conference, xid_event , url) ON CONFLICT REPLACE, FOREIGN KEY(xid_conference) REFERENCES conference(id), FOREIGN KEY(xid_conference, xid_event) REFERENCES event(xid_conference, id) ); INSERT INTO conference SELECT id, title, subtitle, venue, city, start, end, day_change, timeslot_duration, active, url FROM conference_old; INSERT INTO track SELECT * FROM track_old; INSERT INTO room SELECT * FROM room_old; INSERT INTO person SELECT * FROM person_old; INSERT INTO event SELECT * FROM event_old; INSERT INTO event_person SELECT * FROM event_person_old; INSERT INTO event_room SELECT * FROM event_room_old; INSERT INTO link SELECT * FROM link_old; DROP TABLE conference_old; DROP TABLE track_old; DROP TABLE room_old; DROP TABLE person_old; DROP TABLE event_old; DROP TABLE event_person_old; DROP TABLE event_room_old; DROP TABLE link_old; PRAGMA user_version=1; COMMIT; confclerk-0.6.0/src/mvc/0000775000175000017500000000000012156157674014351 5ustar gregoagregoaconfclerk-0.6.0/src/mvc/delegate.h0000664000175000017500000000755012156157674016303 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef DELEGATE_H #define DELEGATE_H #include class Delegate : public QItemDelegate { Q_OBJECT public: enum ControlId { ControlNone = 0, FavouriteControlOn, FavouriteControlOff, AlarmControlOn, AlarmControlOff, WarningControl }; class Control { public: Control(ControlId aControlId, const QString &aImageName, const Control* prev_control); inline QImage *image() const { return mImage; } inline void setDrawPoint(const QPoint &aPoint) { mDrawPoint = aPoint; } inline QRect drawRect(const QRect &aRect) const // helper for determining if Control was clicked { return QRect(drawPoint(aRect), drawPoint(aRect)+QPoint(mImage->size().width(),mImage->size().height())); } void paint(QPainter* painter, const QRect rect); bool enabled() const { return mEnabled; } void setEnabled(bool v) { mEnabled = v; } private: inline QPoint drawPoint(const QRect &aRect = QRect()) const // for painter to draw Control { if(aRect == QRect()) // null rectangle return mDrawPoint; // returns relative drawing point else return QPoint(aRect.x()+aRect.width(),aRect.y()) + mDrawPoint; // returns absolute drawing point } ControlId mId; QImage *mImage; QPoint mDrawPoint; // relative 'start-drawing' position (may hold negative values) bool mEnabled; }; Delegate(QTreeView *aParent); // the delegate 'owner' has to be specified in the constructor - it's used to obtain visualRect of selected item/index ~Delegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; // Delegate::ControlId whichControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) const; bool isPointFromRect(const QPoint &aPoint, const QRect &aRect) const; private: bool hasParent( const QModelIndex &index ) const; bool isLast( const QModelIndex &index ) const; bool isExpanded( const QModelIndex &index ) const; void defineControls(); // TODO: the better place for these methods would be 'eventmodel' // they are used in 'paint' method and so it's better to obtain number of // favourities/alarms once when the data has changed and not to call // these methods which iterate over all Events in corresponding group // every time it requires them int numberOfFavourities(const QModelIndex &index) const; int numberOfAlarms(const QModelIndex &index) const; private: QPointer mViewPtr; QMap mControls; }; #endif /* DELEGATE_H */ confclerk-0.6.0/src/mvc/treeview.cpp0000664000175000017500000001211712156157674016711 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include #include "treeview.h" #include "delegate.h" #include "event.h" #include "conference.h" #include "eventmodel.h" #ifdef MAEMO #include "alarm.h" #include "appsettings.h" #endif #include TreeView::TreeView(QWidget *aParent) : QTreeView(aParent) { connect(this, SIGNAL(clicked(QModelIndex)), SLOT(handleItemClicked(QModelIndex))); } void TreeView::mouseReleaseEvent(QMouseEvent *aEvent) { QModelIndex index = currentIndex(); QPoint point = aEvent->pos(); // test whether we have handled the mouse event if(!testForControlClicked(index,point)) { // pass the event to the Base class, so item clicks/events are handled correctly QTreeView::mouseReleaseEvent(aEvent); } } // returns bool if some Control was clicked bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) { bool handled = false; if(!aIndex.isValid()) return handled; int confId = Conference::activeConference(); // QRect rect = visualRect(aIndex); // visual QRect of selected/clicked item in the list Delegate *delegate = static_cast(itemDelegate(aIndex)); switch(delegate->whichControlClicked(aIndex,aPoint)) { case Delegate::FavouriteControlOn: case Delegate::FavouriteControlOff: { // handle Favourite Control clicked Event event = Event::getById(aIndex.data().toInt(),confId); QList conflicts = Event::conflictEvents(event.id(),Conference::activeConference()); event.setFavourite(!event.isFavourite()); event.update("favourite"); if(event.isFavourite()) { // event has became 'favourite' and so 'conflicts' list may have changed conflicts = Event::conflictEvents(event.id(),Conference::activeConference()); } // have to emit 'eventChanged' signal on all events in conflict for(int i=0; irowCount(QModelIndex()); i++) { setExpanded(model()->index(i,0,QModelIndex()),aExpanded); } } confclerk-0.6.0/src/mvc/event.h0000664000175000017500000001047612156157674015653 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef EVENT_H #define EVENT_H #include #include #include #include "ormrecord.h" class Room; /** NoSuchEventException is thrown when required event does not exist. */ class NoSuchEventException { }; class Event : public OrmRecord { public: Event(); static const QSqlRecord sColumns; static QString const sTableName; public: static Event getById(int id, int conferenceId); static QList getByDate(const QDate & date, int conferenceId, QString orderBy); static QList getFavByDate(const QDate & date, int conferenceId); // get Favourities by Date static QList getSearchResultByDate(const QDate& date, int conferenceId, QString orderBy); static QList getByTrack(int id); static QList getByDateAndRoom(const QDate& date, int conferenceId); static QList conflictEvents(int aEventId, int conferenceId); static QList getImminentAlarmEvents(int maxSecToAlarm, int conferenceId); public: int id() const { return value("id").toInt(); } int conferenceId() const { return value("xid_conference").toInt(); } QDateTime start() const { return value("start").toDateTime(); } /// duration of the event in seconds int duration() const { return value("duration").toInt(); } int trackId() const { return value("xid_track").toInt(); } QString type() const { return value("type").toString(); } QString language() const { return value("language").toString(); } bool isFavourite() const { return value("favourite").toBool(); } bool hasAlarm() const { return value("alarm").toBool(); } bool hasTimeConflict() const; QString tag() const { return value("tag").toString(); } QString title() const { return value("title").toString(); } QString subtitle() const { return value("subtitle").toString(); } QString abstract() const { return value("abstract").toString(); } QString description() const { return value("description").toString(); } // records from other tables associated with 'id' Room* room(); QString roomName(); int roomId(); QStringList persons(); QMap links(); void setId(int id) { setValue("id", id); } void setConferenceId(int conferenceId) { setValue("xid_conference", conferenceId); } void setStart(const QDateTime & start) { setValue("start", start); } void setDuration(int duration) { setValue("duration", duration); } void setTrackId(int trackId) { setValue("xid_track", trackId); } void setType(const QString & type) { setValue("type", type); } void setLanguage(const QString & language) { setValue("language", language); } void setFavourite(bool favourite) { setValue("favourite", (int)((favourite))); } void setHasAlarm(bool alarm) { setValue("alarm", (int)((alarm))); } void setTag(const QString& tag) { setValue("tag", tag); } void setTitle(const QString& title) { setValue("title", title); } void setSubtitle(const QString& subtitle) { setValue("subtitle", subtitle); } void setAbstract(const QString& abstract) { setValue("abstract", abstract); } void setDescription(const QString& description) { setValue("description", description); } // records from other tables associated with 'id' void setRoom(const QString& room); void setPersons(const QStringList &persons); void setLinks(const QMap &aLinks); friend class EventTest; private: QStringList mPersonsList; QMap mLinksList; int mRoomId; QString mRoomName; Room* room_; }; #endif // EVENT_H confclerk-0.6.0/src/mvc/eventmodel.cpp0000664000175000017500000002245412156157674017226 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "eventmodel.h" #include "conference.h" #include "track.h" #include "room.h" const QString EventModel::COMMA_SEPARATOR = ", "; EventModel::EventModel() { } void EventModel::Group::setTitle(const QList& mEvents) { QDateTime startTime = mEvents.at(mFirstEventIndex).start(); QDateTime endTime(startTime); for (int i = mFirstEventIndex; i != mFirstEventIndex + mChildCount; ++i) { endTime = qMax(mEvents.at(i).start().addSecs(mEvents.at(i).duration()), endTime); } mTitle = QString("%1 - %2").arg(startTime.toString("HH:mm")).arg(endTime.toString("HH:mm")); } // We want to group the events into "time slots/time groups" that // should start at full hours and have the duration of either // one hour or (if less than 3 events are in one time slot) // multiple of one hour. void EventModel::createTimeGroups() { mGroups.clear(); mParents.clear(); if (mEvents.empty()) return; const int minTimeSpan = 3600; // one hour // minimum duration of a group in seconds const int minChildCount = 3; // minimum number of events in one group QDateTime groupStartDateTime(mEvents.first().start().date(), QTime(mEvents.first().start().time().hour(), 0), mEvents.first().start().timeSpec()); QDateTime groupEndDateTime = groupStartDateTime.addSecs(mEvents.first().duration()); mGroups << EventModel::Group("", 0); int timeSpan = minTimeSpan; for (int i = 0; i != mEvents.count(); ++i) { QDateTime eventStartDateTime = mEvents.at(i).start(); QDateTime eventEndDateTime = eventStartDateTime.addSecs(mEvents.at(i).duration()); if (eventStartDateTime >= groupStartDateTime.addSecs(timeSpan)) { // a new group could be necessary if (mGroups.last().mChildCount < minChildCount) { // too few events in the group => no new group // except a gap in time would occur that is longer than minTimeSpan QDateTime prevEventStartDateTime = mEvents.at(i).start(); if (i > 0 && qMax(prevEventStartDateTime.addSecs(mEvents.at(i-1).duration()), groupEndDateTime).secsTo(eventStartDateTime) < minTimeSpan) { timeSpan += minTimeSpan; --i; continue; // repeat with the same event } } // a new group is necessary mGroups.last().setTitle(mEvents); groupStartDateTime = groupStartDateTime.addSecs(timeSpan); groupEndDateTime = groupStartDateTime.addSecs(mEvents.at(i).duration()); mGroups << EventModel::Group("", i); timeSpan = minTimeSpan; } // insert event into current group mParents[mEvents.at(i).id()] = mGroups.count() - 1; mGroups.last().mChildCount += 1; groupEndDateTime = qMax(eventEndDateTime, groupEndDateTime); } // the last group needs a title as well mGroups.last().setTitle(mEvents); reset(); } void EventModel::createTrackGroups() { mGroups.clear(); mParents.clear(); if (mEvents.empty()) { return; } int trackId = mEvents.first().trackId(); mGroups << EventModel::Group(Track::retrieveTrackName(trackId), 0); int nextTrackId = trackId; for (int i=0; i::iterator event = mEvents.begin(); int i = 0; while (event != mEvents.end()) { roomId = event->roomId(); if (nextRoomId != roomId) { mGroups.last().mChildCount = i - mGroups.last().mFirstEventIndex; mGroups << EventModel::Group(Room::retrieveRoomName(roomId), i); nextRoomId = roomId; } mParents[event->id()] = mGroups.count() - 1; event++; i++; } mGroups.last().mChildCount = mEvents.count() - mGroups.last().mFirstEventIndex; } QVariant EventModel::data(const QModelIndex& index, int role) const { if (index.isValid() && role == Qt::DisplayRole) { if (index.internalId() == 0) { return mGroups.at(index.row()).mTitle; } else //event data { return static_cast(index.internalPointer())->id(); } } return QVariant(); } QModelIndex EventModel::index(int row, int column, const QModelIndex& parent) const { // TODO: add checks for out of range rows if (!parent.isValid()) { return createIndex(row, column, 0); } else if (parent.internalId() == 0) { const Group& group = mGroups.at(parent.row()); Event* event = const_cast(&mEvents.at(row + group.mFirstEventIndex)); return createIndex(row, column, reinterpret_cast(event)); } else { return QModelIndex(); } } QModelIndex EventModel::parent(const QModelIndex & index) const { if (index.isValid()) { if (index.internalId() == 0) { return QModelIndex(); } Event * event = static_cast(index.internalPointer()); return createIndex(mParents[event->id()], 0, 0); } return QModelIndex(); } int EventModel::columnCount(const QModelIndex & parent) const { Q_UNUSED(parent); return 1; } int EventModel::rowCount (const QModelIndex & parent) const { if (!parent.isValid()) { return mGroups.count(); } if (parent.internalId() == 0) { return mGroups.at(parent.row()).mChildCount; } return 0; } void EventModel::clearModel() { mGroups.clear(); mEvents.clear(); mParents.clear(); reset(); } void EventModel::loadEvents(const QDate &aDate, int aConferenceId) { clearModel(); mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); createTimeGroups(); } void EventModel::loadFavEvents(const QDate &aDate, int aConferenceId) { clearModel(); mEvents = Event::getFavByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); createTimeGroups(); } int EventModel::loadSearchResultEvents(const QDate &aDate, int aConferenceId) { clearModel(); try { mEvents = Event::getSearchResultByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); } catch( OrmException &e ){ qDebug() << "Event::getSearchResultByDate failed: " << e.text(); } catch(...){ qDebug() << "Event::getSearchResultByDate failed"; } createTimeGroups(); return mEvents.count(); } void EventModel::loadEventsByTrack(const QDate &aDate, int aConferenceId) { clearModel(); mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "xid_track, start, duration"); createTrackGroups(); } void EventModel::loadEventsByRoom(const QDate &aDate, int aConferenceId) { clearModel(); mEvents = Event::getByDateAndRoom(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); createRoomGroups(); } void EventModel::loadConflictEvents(int aEventId, int aConferenceId) { clearModel(); mEvents = Event::conflictEvents(aEventId, aConferenceId); createTimeGroups(); } void EventModel::updateModel(int aEventId) { for(int i=0; i(eventIndex.internalPointer())->id() == aEventId) { emit(dataChanged(groupIndex,groupIndex)); emit(dataChanged(eventIndex,eventIndex)); } } } } confclerk-0.6.0/src/mvc/room.h0000664000175000017500000000271412156157674015502 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef ROOM_H_ #define ROOM_H_ #include "ormrecord.h" class Room : public OrmRecord { public: static const QSqlRecord sColumns; static QString const sTableName; static const int sTableColCount; static const QString NAME; public: int id() const { return value("id").toInt(); } void setId(int id) { setValue("id", id); } QString name() const { return value("name").toString(); } void setName(const QString & type) { setValue("name", type); } int insert(); public: static QList getAll(); static Room retrieve(int id); static QString retrieveRoomName(int id); static Room retrieveByName(QString name); }; #endif /* ROOM_H_ */ confclerk-0.6.0/src/mvc/mvc.pro0000664000175000017500000000135612156157674015665 0ustar gregoagregoainclude(../global.pri) TEMPLATE = lib TARGET = mvc DESTDIR = ../bin CONFIG += static QT += sql QMAKE_CLEAN += ../bin/libmvc.a # module dependencies LIBS += -L$$DESTDIR \ -lorm INCLUDEPATH += ../orm ../app DEPENDPATH += . \ ../orm POST_TARGETDEPS += $$DESTDIR/liborm.a maemo { LIBS += -L$$DESTDIR \ -lqalarm \ -lalarm INCLUDEPATH += ../alarm DEPENDPATH += ../alarm POST_TARGETDEPS += $$DESTDIR/libqalarm.a } HEADERS += event.h \ conference.h \ track.h \ delegate.h \ eventmodel.h \ treeview.h \ room.h \ conferencemodel.h SOURCES += event.cpp \ conference.cpp \ track.cpp \ delegate.cpp \ eventmodel.cpp \ treeview.cpp \ room.cpp \ conferencemodel.cpp confclerk-0.6.0/src/mvc/treeview.h0000664000175000017500000000276312156157674016364 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef TREEVIEW_H #define TREEVIEW_H #include class TreeView : public QTreeView { Q_OBJECT public: TreeView(QWidget *aParent = NULL); ~TreeView() {} private: void mouseReleaseEvent(QMouseEvent *aEvent); bool testForControlClicked(const QModelIndex &aIndex, const QPoint &aPoint); public slots: void setAllExpanded(bool aExpanded); // (aExpanded==true) => expanded; (aExpanded==false) => collapsed private slots: void handleItemClicked(const QModelIndex &index); signals: void requestForConflicts(const QModelIndex &aIndex); void eventChanged(int aEventId, bool favouriteChanged); // emited when user changes some event details, eg. sets it Favourite }; #endif /* TREEVIEW_H */ confclerk-0.6.0/src/mvc/eventmodel.h0000664000175000017500000000530412156157674016666 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef EVENTMODEL_H #define EVENTMODEL_H #include #include "event.h" class EventModel : public QAbstractItemModel { public: static const QString COMMA_SEPARATOR; // ", " public: EventModel(); QVariant data(const QModelIndex& index, int role) const; QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; QModelIndex parent ( const QModelIndex & index ) const; int columnCount ( const QModelIndex & parent = QModelIndex() ) const; int rowCount ( const QModelIndex & parent = QModelIndex() ) const; void loadEvents(const QDate &aDate, int aConferenceId); // loads Events from the DB void loadFavEvents(const QDate &aDate, int aConferenceId); // loads Favourite events from the DB void loadEventsByTrack(const QDate &aDate, int aConferenceId); // loads Events sorted by Track id and Event start from the DB int loadSearchResultEvents(const QDate &aDate, int aConferenceId); void loadEventsByRoom(const QDate &aDate, int aConferenceId); void loadConflictEvents(int aEventId, int aConferenceId); // loads events in conflict void clearModel(); private: struct Group { Group(const QString & title, int firstEventIndex) : mTitle(title), // e.g. "16:00 - 17:30" mFirstEventIndex(firstEventIndex), // first index within mEvents mChildCount(0) // number of events in mEvents {} QString mTitle; int mFirstEventIndex; int mChildCount; void setTitle(const QList& mEvents); }; private: void createTimeGroups(); void createTrackGroups(); void createTrackGroupsNew(); void createRoomGroups(); public slots: void updateModel(int aEventId); private: QList mEvents; QList mGroups; QHash mParents; ///< eventId, groupId }; #endif // EVENTMODEL_H confclerk-0.6.0/src/mvc/delegate.cpp0000664000175000017500000002753012156157674016636 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "delegate.h" #include "eventmodel.h" #include "track.h" #include #include #include "room.h" const int RADIUS = 10; const int SPACER = 10; const double scaleFactor1 = 0.4; const double scaleFactor2 = 0.8; Delegate::Delegate(QTreeView *aParent) : QItemDelegate(aParent) , mViewPtr(aParent) { mControls.clear(); defineControls(); } Delegate::~Delegate() { QListIterator i(mControls.keys()); while (i.hasNext()) { delete mControls[i.next()]->image(); } } void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (!mViewPtr) return; painter->save(); QColor textColor = option.palette.color(QPalette::Text); if(hasParent(index)) { // entry horizontal layout: // * spacer (aka y position of image) // * image // * rest is text, which is 1 line of title with big letters and 2 lines of Presenter and Track int aux = option.rect.height() - SPACER - mControls[FavouriteControlOn]->image()->height(); Event *event = static_cast(index.internalPointer()); // font SMALL QFont fontSmall = option.font; fontSmall.setBold(false); fontSmall.setPixelSize(aux*0.2); QFontMetrics fmSmall(fontSmall); // font SMALL bold QFont fontSmallB = fontSmall; fontSmallB.setBold(true); // font BIG QFont fontBig = option.font; fontBig.setBold(false); fontBig.setPixelSize(aux*0.33); QFontMetrics fmBig(fontBig); // font BIG bold QFont fontBigB = fontBig; fontBigB.setBold(true); QFontMetrics fmBigB(fontBigB); // background (in case of time conflicts) if(event->hasTimeConflict()) { painter->setBrush(Qt::yellow); painter->setPen(Qt::NoPen); painter->drawRect(option.rect); } // background (without time conflicts) else { QStyleOption styleOption; styleOption.rect = option.rect; qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &styleOption, painter, mViewPtr); } // draw Controls foreach(Control* c, mControls.values()) { c->setEnabled(false); } if(event->isFavourite()) mControls[FavouriteControlOn]->paint(painter, option.rect); else mControls[FavouriteControlOff]->paint(painter, option.rect); if(event->hasAlarm()) mControls[AlarmControlOn]->paint(painter, option.rect); else mControls[AlarmControlOff]->paint(painter, option.rect); if(event->hasTimeConflict()) mControls[WarningControl]->paint(painter, option.rect); // draw texts // it starts just below the image // ("position of text" is lower-left angle of the first letter, // so the first line is actually at the same height as the image) painter->setPen(QPen(event->hasTimeConflict() ? Qt::black : textColor)); QPointF titlePointF(option.rect.x() + SPACER, option.rect.y() + SPACER + mControls[FavouriteControlOn]->image()->height()); QTime start = event->start().time(); painter->setFont(fontBig); painter->drawText(titlePointF,start.toString("hh:mm") + "-" + start.addSecs(event->duration()).toString("hh:mm") + ", " + event->roomName()); // title titlePointF.setY(titlePointF.y()+fmBig.height()-fmBig.descent()); painter->setFont(fontBigB); QString title = event->title(); if(fmBigB.boundingRect(title).width() > (option.rect.width()-2*SPACER)) // the title won't fit the screen { // chop words from the end while( (fmBigB.boundingRect(title + "...").width() > (option.rect.width()-2*SPACER)) && !title.isEmpty()) { title.chop(1); // chop characters one-by-one from the end while( (!title.at(title.length()-1).isSpace()) && !title.isEmpty()) { title.chop(1); } } title += "..."; } painter->drawText(titlePointF,title); // persons titlePointF.setY(titlePointF.y()+fmSmall.height()-fmSmall.descent()); painter->setFont(fontSmall); QString presenterPrefix = event->persons().count() < 2 ? "Presenter" : "Presenters"; painter->drawText(titlePointF,presenterPrefix + ": " + event->persons().join(" and ")); // track titlePointF.setY(titlePointF.y()+fmSmall.height()-fmSmall.descent()); painter->drawText(titlePointF,"Track: " + Track::retrieveTrackName(event->trackId())); } else // doesn't have parent - time-groups' elements (top items) { int numFav = numberOfFavourities(index); int numAlarm = numberOfAlarms(index); QStyleOptionButton styleOptionButton; styleOptionButton.rect = option.rect; if (isExpanded(index)) styleOptionButton.state = QStyle::State_Sunken; // styleOptionButton.text = qVariantValue(index.data()); qApp->style()->drawPrimitive(QStyle::PE_PanelButtonCommand, &styleOptionButton, painter, mViewPtr); // qApp->style()->drawControl(QStyle::CE_PushButtonLabel, &styleOptionButton, painter, mViewPtr); // qApp->style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &styleOptionButton, painter, mViewPtr); QFont fontSmall = option.font; fontSmall.setBold(true); fontSmall.setPixelSize(option.rect.height()*scaleFactor1); QFontMetrics fmSmall(fontSmall); QFont fontBig = option.font; fontBig.setBold(true); fontBig.setPixelSize(option.rect.height()*scaleFactor2); QFontMetrics fmBig(fontBig); int spacer = (fmSmall.boundingRect("999").width() < SPACER) ? SPACER : fmSmall.boundingRect("999").width(); // draw icons painter->setPen(QPen(textColor)); painter->setFont(fontSmall); QImage *image = mControls[numFav ? FavouriteControlOn : FavouriteControlOff]->image(); QPoint drawPoint = option.rect.topRight() - QPoint( spacer + image->width(), - option.rect.height()/2 + image->height()/2); painter->drawImage(drawPoint,*image); painter->drawText(drawPoint+QPoint(image->width()+2, image->height() - 2), QString::number(numFav)); drawPoint.setX(drawPoint.x() - spacer - image->width()); image = mControls[numAlarm ? AlarmControlOn : AlarmControlOff]->image(); painter->drawImage(drawPoint,*image); painter->drawText(drawPoint+QPoint(image->width()+2, image->height() - 2), QString::number(numAlarm)); // draw texts QString numEvents = QString::number(index.model()->rowCount(index)).append("/"); drawPoint.setX(drawPoint.x() - spacer - fmSmall.boundingRect(numEvents).width()); drawPoint.setY(drawPoint.y()+image->height() - 2); painter->drawText(drawPoint,numEvents); QPointF titlePointF = QPoint( option.rect.x()+SPACER, option.rect.y()+option.rect.height()-fmBig.descent()); painter->setFont(fontBig); painter->drawText(titlePointF,qVariantValue(index.data())); } painter->restore(); } QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option) if (index.internalId() == 0) // time group { return QSize(40,40); } else // event { return QSize(100,100); } } bool Delegate::hasParent( const QModelIndex &index ) const { if( index.parent().isValid() ) return true; else return false; } bool Delegate::isLast( const QModelIndex &index ) const { if(!hasParent(index)) return false; // what should be returned here? if(index.row() >= (index.model()->rowCount(index.parent())-1)) return true; else return false; } bool Delegate::isExpanded( const QModelIndex &index ) const { if( !mViewPtr ) return false; else return mViewPtr->isExpanded( index ); } Delegate::ControlId Delegate::whichControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) const { if(!hasParent(aIndex)) // time-group item (root item) return ControlNone; QListIterator i(mControls.keys()); while (i.hasNext()) { ControlId id = i.next(); Control *control = mControls[id]; if (control->enabled() and control->drawRect(static_cast(parent())->visualRect(aIndex)).contains(aPoint)) { return id; } } return ControlNone; } Delegate::Control::Control(ControlId aControlId, const QString &aImageName, const Control* prev_control) : mId(aControlId) , mImage(new QImage(aImageName)) , mDrawPoint(QPoint(0,0)) , mEnabled(false) { QPoint p; if (prev_control == NULL) { p = QPoint(0, SPACER); } else { p = prev_control->drawPoint(); } p.setX(p.x()-image()->width()-SPACER); setDrawPoint(p); } void Delegate::Control::paint(QPainter* painter, const QRect rect) { painter->drawImage(drawPoint(rect),*image()); setEnabled(true); } void Delegate::defineControls() { // FAVOURITE ICONs // on mControls.insert(FavouriteControlOn, new Control(FavouriteControlOn, QString(":icons/favourite-on.png"), NULL)); // off mControls.insert(FavouriteControlOff, new Control(FavouriteControlOff, QString(":icons/favourite-off.png"), NULL)); // ALARM ICONs // on mControls.insert(AlarmControlOn, new Control(AlarmControlOn, QString(":icons/alarm-on.png"), mControls[FavouriteControlOn])); // off mControls.insert(AlarmControlOff, new Control(AlarmControlOff, QString(":icons/alarm-off.png"), mControls[FavouriteControlOff])); // WARNING ICON mControls.insert(WarningControl, new Control(WarningControl, QString(":icons/dialog-warning.png"), mControls[AlarmControlOff])); } bool Delegate::isPointFromRect(const QPoint &aPoint, const QRect &aRect) const { if( (aPoint.x()>=aRect.left() && aPoint.x()<=aRect.right()) && (aPoint.y()>=aRect.top() && aPoint.y()<=aRect.bottom()) ) return true; return false; } int Delegate::numberOfFavourities(const QModelIndex &index) const { if(index.parent().isValid()) // it's event, not time-group return 0; int nrofFavs = 0; for(int i=0; irowCount(index); i++) if(static_cast(index.child(i,0).internalPointer())->isFavourite()) nrofFavs++; return nrofFavs; } int Delegate::numberOfAlarms(const QModelIndex &index) const { if(index.parent().isValid()) // it's event, not time-group return 0; int nrofAlarms = 0; for(int i=0; irowCount(index); i++) if(static_cast(index.child(i,0).internalPointer())->hasAlarm()) nrofAlarms++; return nrofAlarms; } confclerk-0.6.0/src/mvc/room.cpp0000664000175000017500000000331312156157674016031 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "room.h" QString const Room::sTableName = QString("room"); int const Room::sTableColCount = 2; const QString Room::NAME = "name"; QSqlRecord const Room::sColumns = Room::toRecord(QList() << QSqlField("id", QVariant::Int) << QSqlField(NAME, QVariant::String)); Room Room::retrieveByName(QString name) { QSqlQuery query; query.prepare( selectQuery() + QString("WHERE %1.name = :name").arg(sTableName)); query.bindValue(":name", name); return loadOne(query); } QList Room::getAll() { QSqlQuery query; query.prepare(selectQuery()); return load(query); } Room Room::retrieve(int id) { QSqlQuery query; query.prepare(selectQuery() + QString("WHERE %1.id = :id").arg(sTableName)); query.bindValue(":id", id); return loadOne(query); } QString Room::retrieveRoomName(int id) { Room room = retrieve(id); return room.name(); } confclerk-0.6.0/src/mvc/track.h0000664000175000017500000000325612156157674015634 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef TRACK_H_ #define TRACK_H_ #include "ormrecord.h" class Track : public OrmRecord { public: static const QSqlRecord sColumns; static QString const sTableName; static const int sTableColCount; static const QString CONFERENCEID; static const QString NAME; public: int id() const { return value("id").toInt(); } void setId(int id) { setValue("id", id); } int conferenceid() const { return value("xid_conference").toInt(); } void setConference(int conferenceid) { setValue("xid_conference", conferenceid); } QString name() const { return value("name").toString(); } void setName(const QString & type) { setValue("name", type); } int insert(); public: static QList getAll(); static Track retrieve(int id); static QString retrieveTrackName(int id); static Track retrieveByName(int conferenceid, QString name); }; #endif /* TRACK_H_ */ confclerk-0.6.0/src/mvc/track.cpp0000664000175000017500000000501712156157674016164 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "track.h" QString const Track::sTableName = QString("track"); int const Track::sTableColCount = 3; const QString Track::CONFERENCEID = "xid_conference"; const QString Track::NAME = "name"; QSqlRecord const Track::sColumns = Track::toRecord(QList() << QSqlField("id", QVariant::Int) << QSqlField(CONFERENCEID, QVariant::Int) << QSqlField(NAME, QVariant::String)); class TrackInsertException : OrmSqlException { public: TrackInsertException(const QString& text) : OrmSqlException(text) {} }; int Track::insert() { QSqlQuery query; query.prepare("INSERT INTO " + sTableName + " (" + CONFERENCEID + "," + NAME + ")" + " VALUES " + "(\"" + QString::number(conferenceid()) + "\",\"" + name() + "\")"); if (!query.exec()) { throw TrackInsertException("Exec Error"); } QVariant variant = query.lastInsertId(); if (variant.isValid()) return variant.toInt(); else throw TrackInsertException("Last Insert Id Error"); } Track Track::retrieveByName(int conferenceid, QString name) { QSqlQuery query; query.prepare( selectQuery() + QString("WHERE %1.xid_conference = :xid_conference and %1.name = :name").arg(sTableName)); query.bindValue(":xid_conference", conferenceid); query.bindValue(":name", name); return loadOne(query); } QList Track::getAll() { QSqlQuery query; query.prepare(selectQuery()); return load(query); } Track Track::retrieve(int id) { QSqlQuery query; query.prepare(selectQuery() + QString("WHERE %1.id = :id").arg(sTableName)); query.bindValue(":id", id); return loadOne(query); } QString Track::retrieveTrackName(int id) { Track track = retrieve(id); return track.name(); } confclerk-0.6.0/src/mvc/conference.h0000664000175000017500000000503612156157674016635 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef CONFERENCE_H #define CONFERENCE_H #include #include #include #include "ormrecord.h" class Conference : public OrmRecord { public: static QSqlRecord const sColumns; static QString const sTableName; public: static Conference getById(int id); static QList getAll(); /// Returns the active conference. If no active conference can be found, it returns the conference with the lowest id. /// If no conference exists or database errors occur, it returns -1. static int activeConference(); public: int id() const { return value("id").toInt(); } QString title() const { return value("title").toString(); } QString subtitle() const { return value("subtitle").toString(); } QString venue() const { return value("venue").toString(); } QString city() const { return value("city").toString(); } QDate start() const { return value("start").toDate(); } QDate end() const { return value("end").toDate(); } int dayChange() const { return value("day_change").toInt(); } // in seconds from 00:00 QTime dayChangeTime() const {QTime dayChangeTime(0, 0); return dayChangeTime.addSecs(dayChange());} int timeslotDuration() const { return value("timeslot_duration").toInt(); } // in seconds bool isActive() const { return value("active").toBool(); } QString url() const { return stringFromNullable(value("url")); } void setUrl(const QString& url) { setValue("url", url.isNull() ? QVariant() : url); update("url"); } private: static QString stringFromNullable(const QVariant& v) { if (v.isValid()) { return v.toString(); } else { return QString(); } } }; #endif /* CONFERENCE_H */ confclerk-0.6.0/src/mvc/conferencemodel.h0000664000175000017500000000363512156157674017661 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #ifndef CONFERENCE_MODEL_H #define CONFERENCE_MODEL_H #include #include #include "conference.h" /** ConferenceModel class represents list of conferences for ListViews that may need it. It also provides typed access to the conferences from ConferenceEditor. It does not actually modify anything in DB, this is performed by other classes. \see ConferenceEditor, MainWindow::showConferences() */ class ConferenceModel : public QAbstractListModel { Q_OBJECT public: ConferenceModel(QObject* parent); virtual ~ConferenceModel() { } virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; const Conference& conferenceFromIndex(const QModelIndex&) const; QModelIndex indexFromId(int id) const; public slots: void newConferenceBegin(); void newConferenceEnd(int conferenceId); void conferenceRemoved(); private: // reinitialize list from database void reinit() { conferences = Conference::getAll(); reset(); } QList conferences; }; #endif confclerk-0.6.0/src/mvc/event.cpp0000664000175000017500000002245312156157674016204 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conference.h" #include "event.h" #include "room.h" QString const Event::sTableName = QString("event"); QSqlRecord const Event::sColumns = Event::toRecord(QList() << QSqlField("id", QVariant::Int) << QSqlField("xid_conference", QVariant::Int) << QSqlField("start", QVariant::DateTime) << QSqlField("duration", QVariant::Int) << QSqlField("xid_track", QVariant::Int) << QSqlField("type", QVariant::String) << QSqlField("language", QVariant::String) << QSqlField("favourite", QVariant::Bool) << QSqlField("alarm", QVariant::Bool) << QSqlField("tag", QVariant::String) << QSqlField("title", QVariant::String) << QSqlField("subtitle", QVariant::String) << QSqlField("abstract", QVariant::String) << QSqlField("description", QVariant::String)); Event::Event() : room_(NULL) { } Event Event::getById(int id, int conferenceId) { QSqlQuery query; query.prepare(selectQuery() + "WHERE id = :id AND xid_conference = :conf"); query.bindValue(":id", id); query.bindValue(":conf", conferenceId); return loadOne(query); } QList Event::getByDate(const QDate& date, int conferenceId, QString orderBy) { Q_ASSERT(conferenceId > 0); Conference conference = Conference::getById(conferenceId); QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; query.prepare(selectQuery() + QString("WHERE xid_conference = :conf AND start >= :start AND start < :end ORDER BY %1").arg(orderBy)); query.bindValue(":conf", conferenceId); query.bindValue(":start", dayStart.toTime_t()); query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } QList Event::getByDateAndRoom(const QDate& date, int conferenceId) { Q_ASSERT(conferenceId > 0); Conference conference = Conference::getById(conferenceId); QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; QString aliasEvent("E"); QString aliasEventRoom("R"); query.prepare(QString("SELECT %1 FROM %2 %3, %4 %5 WHERE %3.xid_conference = :conf AND %3.start >= :start AND %3.start < :end AND %3.id = R.xid_event ORDER BY %5.xid_room, %3.start, %3.duration").arg( columnsForSelect(aliasEvent), Event::sTableName, aliasEvent, "EVENT_ROOM", aliasEventRoom)); query.bindValue(":conf", conferenceId); query.bindValue(":start", dayStart.toTime_t()); query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } QList Event::conflictEvents(int aEventId, int conferenceId) { QSqlQuery query; Event event = Event::getById(aEventId,conferenceId); query.prepare(selectQuery() + "WHERE xid_conference = :conf AND ( \ ( start >= :s1 AND ( start + duration ) < :e1 ) \ OR ( ( start + duration ) > :s2 AND start < :e2 ) ) \ AND favourite = 1 AND NOT id = :id ORDER BY start, duration"); query.bindValue(":conf", event.conferenceId()); query.bindValue(":s1", convertToDb(event.start(), QVariant::DateTime)); query.bindValue(":e1", convertToDb(event.start().toTime_t()+event.duration(), QVariant::DateTime)); query.bindValue(":s2", convertToDb(event.start(), QVariant::DateTime)); query.bindValue(":e2", convertToDb(event.start().toTime_t()+event.duration(), QVariant::DateTime)); query.bindValue(":id", event.id()); return load(query); } QList Event::getImminentAlarmEvents(int maxSecToAlarm, int conferenceId) { QSqlQuery query; query.prepare(selectQuery() + "WHERE xid_conference = :conf AND (start < :start AND alarm = 1) ORDER BY start, duration"); query.bindValue(":conf", conferenceId); query.bindValue(":start", convertToDb(QDateTime::currentDateTime().addSecs(maxSecToAlarm), QVariant::DateTime)); return load(query); } QList Event::getFavByDate(const QDate& date, int conferenceId) { Q_ASSERT(conferenceId > 0); Conference conference = Conference::getById(conferenceId); QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; query.prepare(selectQuery() + QString("WHERE xid_conference = :conf AND start >= :start AND start < :end AND favourite = 1 ORDER BY start, duration")); query.bindValue(":conf", conferenceId); query.bindValue(":start", dayStart.toTime_t()); query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } Room* Event::room() { if (room_ == NULL) { QSqlQuery query; query.prepare("SELECT xid_room FROM event_room WHERE xid_event = :id AND xid_conference = :conf"); query.bindValue(":id", id()); query.bindValue(":conf", conferenceId()); if (!query.isActive()) if (!query.exec()) throw OrmSqlException(query.lastError().text()); if (!query.next()) { qDebug() << "No room found for event id: " << id(); throw OrmNoObjectException(); } int id = query.record().value("xid_room").toInt(); room_ = new Room(Room::retrieve(id)); } return room_; } QString Event::roomName() { return room()->name(); } int Event::roomId() { return room()->id(); } QStringList Event::persons() { if( mPersonsList.isEmpty() ) { QSqlQuery query; query.prepare("SELECT person.name FROM person INNER JOIN event_person ON person.id = event_person.xid_person AND event_person.xid_event = :id AND event_person.xid_conference = :conf1 AND person.xid_conference = :conf2"); query.bindValue(":id", id()); query.bindValue(":conf1", conferenceId()); query.bindValue(":conf2", conferenceId()); if (!query.exec()) qDebug() << query.lastError(); while(query.next()) mPersonsList.append(query.record().value("name").toString()); } return mPersonsList; } QMap Event::links() { if ( mLinksList.isEmpty() ) { QSqlQuery query; query.prepare("SELECT name,url FROM link WHERE xid_event = :id AND xid_conference = :conf"); query.bindValue(":id", id()); query.bindValue(":conf", conferenceId()); query.exec(); // TODO: handle query error //qDebug() << query.lastError(); while(query.next()) mLinksList.insert(query.record().value("name").toString(), query.record().value("url").toString()); } return mLinksList; } bool Event::hasTimeConflict() const { if(!isFavourite()) // if it's not favourite, it can't have time-conflict return false; return conflictEvents(id(),conferenceId()).count() > 0 ? true : false; } void Event::setRoom(const QString &room) { Q_UNUSED(room); qWarning("WARINING: setRoom() is NOT IMPLEMENTED YET"); // TODO: implement } void Event::setPersons(const QStringList &persons) { Q_UNUSED(persons); qWarning("WARINING: setPersons() is NOT IMPLEMENTED YET"); // TODO: implement } void Event::setLinks(const QMap &aLinks) { Q_UNUSED(aLinks); qWarning("WARINING: setLinks() is NOT IMPLEMENTED YET"); // TODO: implement } QList Event::getSearchResultByDate(const QDate& date, int conferenceId, QString orderBy) { QList list; // Check whether the temporary table SEARCH_EVENT exists (http://www.sqlite.org/faq.html#q7) QSqlQuery query("SELECT count(*) FROM sqlite_temp_master WHERE type='table' and name='SEARCH_EVENT'"); if (!query.exec()) { qDebug() << "SQL Error: " << query.lastError().text(); return list; } query.first(); QVariant v = query.value(0); if (v.toInt() != 1) return list; QString strQuery = QString("SELECT %1 FROM EVENT INNER JOIN SEARCH_EVENT USING (xid_conference, id) ").arg(columnsForSelect()); strQuery += QString("WHERE xid_conference = :conf AND start >= :start AND start < :end ORDER BY %1").arg(orderBy); query = QSqlQuery(); try { if( !query.prepare( strQuery ) ){ qDebug() << "QSqlQuery.prepare error"; throw OrmSqlException( query.lastError().text() ); } Q_ASSERT(conferenceId > 0); Conference conference = Conference::getById(conferenceId); QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); query.bindValue(":conf", conferenceId); query.bindValue(":start", dayStart.toTime_t()); query.bindValue(":end", dayStart.addDays(1).toTime_t()); list = load(query); } catch(OrmException &e) { qDebug() << "getSearchResultByDate error: " << e.text(); } catch(...){ qDebug() << "getSearchResultByDate failed ..."; } return list; } confclerk-0.6.0/src/mvc/conferencemodel.cpp0000664000175000017500000000422712156157674020212 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conferencemodel.h" ConferenceModel::ConferenceModel(QObject* parent) : QAbstractListModel(parent) , conferences(Conference::getAll()) { } int ConferenceModel::rowCount(const QModelIndex& parent) const { if (parent.isValid()) { return 0; } else { return conferences.size(); } } QVariant ConferenceModel::data(const QModelIndex& index, int role) const { if (role != Qt::DisplayRole) { return QVariant(); } return conferences[index.row()].title(); try { const Conference& c = conferenceFromIndex(index); return c.title(); } catch (OrmNoObjectException&) { return QVariant(); } } const Conference& ConferenceModel::conferenceFromIndex(const QModelIndex& index) const { if (index.parent().isValid() or index.column() != 0 or index.row() >= conferences.size()) { throw OrmNoObjectException(); } return conferences[index.row()]; } QModelIndex ConferenceModel::indexFromId(int id) const { for (int i = 0; i < conferences.size(); ++i) { if (conferences[i].id() == id) { return index(i, 0); } } return QModelIndex(); } void ConferenceModel::newConferenceBegin() { } void ConferenceModel::newConferenceEnd(int conferenceId) { Q_UNUSED(conferenceId); reinit(); } void ConferenceModel::conferenceRemoved() { reinit(); } confclerk-0.6.0/src/mvc/conference.cpp0000664000175000017500000000373412156157674017173 0ustar gregoagregoa/* * Copyright (C) 2010 Ixonos Plc. * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ #include "conference.h" #include "../sql/sqlengine.h" QSqlRecord const Conference::sColumns = Conference::toRecord(QList() << QSqlField("id", QVariant::Int) << QSqlField("title", QVariant::String) << QSqlField("subtitle", QVariant::String) << QSqlField("venue", QVariant::String) << QSqlField("city", QVariant::String) << QSqlField("start", QVariant::DateTime) << QSqlField("end", QVariant::DateTime) << QSqlField("day_change", QVariant::Int) << QSqlField("timeslot_duration", QVariant::Int) << QSqlField("active", QVariant::Bool) << QSqlField("url", QVariant::String) ); QString const Conference::sTableName = QString("conference"); Conference Conference::getById(int id) { QSqlQuery query; query.prepare(selectQuery() + "WHERE id = :id"); query.bindValue(":id", id); return loadOne(query); } QList Conference::getAll() { QSqlQuery query; query.prepare(selectQuery()); return load(query); } int Conference::activeConference() { QSqlQuery query("SELECT id FROM conference ORDER BY active DESC, id LIMIT 1"); if (!query.exec() || !query.first()) return -1; return query.record().value("id").toInt(); } confclerk-0.6.0/src/src.pro0000664000175000017500000000020512156157674015072 0ustar gregoagregoainclude(global.pri) TEMPLATE = subdirs maemo : SUBDIRS += alarm SUBDIRS += orm sql mvc gui app #SUBDIRS += test CONFIG += ordered confclerk-0.6.0/src/bin/0000775000175000017500000000000012156157674014334 5ustar gregoagregoaconfclerk-0.6.0/src/icons.qrc0000664000175000017500000000103112156157674015401 0ustar gregoagregoa icons/add.png icons/remove.png icons/expand.png icons/collapse.png icons/reload.png icons/dialog-warning.png icons/search.png icons/today.png icons/favourite-off.png icons/favourite-on.png icons/alarm-on.png icons/alarm-off.png confclerk-0.6.0/NEWS0000664000175000017500000000603412156157674013477 0ustar gregoagregoaThis is the NEWS file for ConfClerk. ConfClerk is the successor of fosdem-schedule; cf. docs/fosdem-schedule for the historic documentation. version 0.6.0, 2013-06-13 * New DB schema 001. Datebase is converted on first start. DB schema update functionality implemented. * Added more keybindings. (Fixes: #28) * Rewrote event detail dialog, to avoid flicker on Maemo. (Fixes: #48) * Events after midnight are shown on the day before (if the conference XML file is correct). (Fixes: #43) * On non-Maemo system "alarms" (notifications) are shown. (Fixes: #46) * Try to show current day on startup and show "day" tab. (Fixes: #44) * Use conference id (not title) for import. (Fixes: #45) * Use conference id (not title) for alarms (maemo). (Fixes: #38) * Use one day navigator for whole app (instead of separate ones per tab). (Fixes: #11) version 0.5.5, 2012-06-12 * UI changes: - button bar on the right side - shared "day navigator" - "Now" tab removed, function integrated into former "today" button * Add "reload schedule" button. Fixes: #34 * Alarms are actually removed now. Thanks to Axel Beckert for the bug report. Fixes: #38 * Handle redirects when importing schedules over the network. Thanks to Axel Beckert for the bug report. Fixes: #39 * Update some icons. Thanks to Axel Beckert for the bug report. Fixes: #40 * Improve timezone handling. Fixes: #42 * Add expand/collapse buttons/actions. Fixes: #31 * Update example URLs in README. version 0.5.4, 2011-09-14 * Change displaying events a bit, use system colours (#13). * Fix display of conflict and alarm icon on maemo (#35). * Improve logic of grouping events into timeslots (#22). * Remove warnings without a database or with an empty one (#20). * Import/update: show progressbar immediately (#25). * Update dates and text for day navigator widget when switching conference (#36). Version 0.5.3, 2011-08-16 * Add "jump to today" button to date navigator. Thanks to Michael Schutte for the patch. Fixes: #29 * Don't die on importing a schedule that does not contain a city field. Thanks to Axel Beckert for the bug report. Fixes: #32 Version 0.5.2, 2011-07-23 * Show close button in conference dialog also if there are no conferences yet. * Show event title instead of id in alarm (maemo). * Remove event/room records on import to get rid of "old" room names; this avoids duplicates when room names change. Version 0.5.1, 2011-07-14 * Improve search function: split search string on whitespace. * Various small UI changes, e.g.: - cancel button in settings dialogs - colors and borders - date format in date navigator - flatten menu - remove status bar - clean up some dialogs Version 0.5.0, 2011-06-29 * First release of ConfClerk as the fosdem-schedule successor. * Continue the multi-conference feature, make sure persons/tracks/rooms are handled separately per conference. * Remove FOSDEM- and maemo-specific parts. * Exchange icons to be sure about the provenance. * Some code cleanup, most notable: use prepared statements for all SQL queries. confclerk-0.6.0/README0000664000175000017500000001232412156157674013657 0ustar gregoagregoaThis is the README file for ConfClerk. ConfClerk is the successor of fosdem-schedule; cf. docs/fosdem-schedule for the historic documentation. Description: ConfClerk is an application written in Qt, which makes conference schedules available offline. It displays the conference schedule from various views, supports searches on various items (speaker, speech topic, location, etc.) and enables you to select favorite events and create your own schedule. At the moment ConfClerk is able to import schedules in XML format created by the PentaBarf conference management system (or frab) used by e.g. FOSDEM, DebConf, FrOSCon, Grazer Linuxtage, and the CCC. ConfClerk is targeted at mobile devices like the Nokia N810 and N900 but works on any sytem running Qt. See the file ./INSTALL for building and installation instructions, and ./AUTHORS for the list of contributors. Copyright and License: Copyright (C) 2010 Ixonos Plc. Copyright (C) 2011-2013, Philipp Spitzer, gregor herrmann, Stefan Strahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. data/confclerk.*: Copyright (C) 2011, Christian Kling This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. src/icons/favourite*, src/icons/alarm*, src/icons/collapse*, src/icons/expand*: Copyright (C) 2012, Philipp Spitzer, Stefan Strahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. src/icons/*: All other icons are taken from the Debian package gnome-icon-theme, which contains the following notice (as of 2011-06-24): Copyright © 2002-2008: Ulisse Perusin Riccardo Buzzotta Josef Vybíral Hylke Bons Ricardo González Lapo Calamandrei Rodney Dawes Luca Ferretti Tuomas Kuosmanen Andreas Nilsson Jakub Steiner GNOME icon theme is distributed under the terms of either GNU LGPL v.3 or Creative Commons BY-SA 3.0 license. History: ConfClerk started as fosdem-schedule, targeted at Maemo as an operating system and the FOSDEM conference. fosdem-schedule was written by Ixonos Plc., maintained at http://sourceforge.net/projects/fosdem-maemo/ , and released under the GNU GPL 2 or later. Cf. docs/fosdem-schedule for more information. ConfClerk is the successor of fosdem-schedule, aiming at improvements and generalization regarding supported platforms and conference systems. The project was started after fosdem-schedule was not actively developped anymore and with the "blessing" of the fosdem-schedule developers; cf. http://sourceforge.net/mailarchive/forum.php?thread_name=20110621171440.GA4521%40nerys.comodo.priv.at&forum_name=fosdem-maemo-devel Thanks guys! Contact: Philipp Spitzer, gregor herrmann, Stefan Strahl Toastfreeware http://www.toastfreeware.priv.at/confclerk/ Tested pentabarf (or frab) instances: - FOSDEM: http://fosdem.org/schedule/xml - Grazer Linuxtage (2013): http://glt13-programm.linuxtage.at/schedule.de.xml - DebConf (2012): http://penta.debconf.org/dc12_schedule/schedule.en.xml - 29C3: http://events.ccc.de/congress/2012/Fahrplan/schedule.en.xml - FrOSCon (2012): http://programm.froscon.org/2012/schedule.xml confclerk-0.6.0/TODO0000664000175000017500000000026312156157674013466 0ustar gregoagregoa- .pro: maybe add an install target - explore src/alarm/calendar* - if toolbar is turned off, it can not be turned on anymore. - try to de-duplicate README and data/confclerk.pod confclerk-0.6.0/COPYING0000664000175000017500000004310312156157674014031 0ustar gregoagregoa GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. confclerk-0.6.0/ChangeLog0000664000175000017500000026350612156157674014563 0ustar gregoagregoa2013-06-12 gregoa * NEWS: Update NEWS for 0.6.0 release. * src/global.pri: Set version to 0.6.0. 2013-06-12 philipp * src/gui/mainwindow.h: Removed a "TODO" comment. 2013-06-12 gregoa * README: Update example URLs in README. 2013-06-12 philipp * src/gui/mainwindow.cpp: Added some actions to the mainwindow - otherwise shortcuts don't work on MAEMO (see ticket #28). * src/alarm/alarm.cpp: Removed debug output. 2013-05-30 gregoa * src/gui/eventdialog.cpp: Eventdialog: make sure the same colours as everywhere are used. Additionally adjust font size on maemo. This should allow to close #48. 2013-05-28 philipp * src/gui/eventdialog.cpp, src/gui/eventdialog.ui: Changed the event dialog layout hoping to improve issue #48. 2013-05-28 gregoa * confclerk.pro: Move removal of generated file into new releaseclean target. * confclerk.pro: .pro: Add created files to QMAKE_DISTCLEAN. 2013-05-28 philipp * src/app/main.cpp, src/gui/mainwindow.cpp, src/gui/mainwindow.h: Made sure the mainwindow is destroyed properly and the sql database is closed. 2013-05-28 gregoa * src/gui/eventdialog.cpp, src/mvc/treeview.cpp: #include appsettings.h for maemo. 2013-04-30 philipp * src/mvc/conference.h, src/mvc/event.cpp, src/mvc/eventmodel.cpp, src/sql/sqlengine.cpp: Now the dayChange time is taken into account. This fixes #43. 2013-04-19 gregoa * README, data/confclerk.pod, src/alarm/alarm.cpp, src/alarm/alarm.h, src/app/application.cpp, src/app/application.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/about.ui, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: bump copyright years * AUTHORS: add Stefan to AUTHORS 2013-04-16 philipp * src/gui/mainwindow.cpp: Formatted alarm message (closes ticket #46). * src/alarm/alarm.h, src/app/appsettings.h, src/gui/eventdialog.cpp, src/gui/mainwindow.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/treeview.cpp: Alarms are reported via QSystemTray now (see ticket #46). 2013-04-04 gregoa * src/gui/mainwindow.cpp: extend comment re systrayicon position 2013-04-03 gregoa * src/gui/mainwindow.cpp: tray icon: add (commented out) debug output and ->hide 2013-04-02 philipp * src/gui/eventdialog.cpp, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/delegate.cpp: Prepared to show an alarm message via tray icon on non-MAEMO systems. 2013-04-02 gregoa * src/mvc/treeview.cpp: fix typo in comment * src/gui/eventdialog.cpp: fix typo in comment * src/mvc/event.cpp: fix typo in comment 2013-03-19 philipp * src/gui/mainwindow.ui: The day tab is now the current tab when starting the program (ticket #44). * src/gui/mainwindow.cpp, src/gui/mainwindow.h: Current day is used now when starting the program or loading a conference (ticket #44). * src/gui/daynavigatorwidget.ui, src/gui/mainwindow.ui: Created more shortcuts (ticket #28). * src/dbschema000to001.sql, src/dbschema001.sql: Added comments to the SQL statements (back in October). 2012-10-17 philipp * src/gui/searchtabcontainer.cpp: The focus is set to the search input field when the search icon is clicked. 2012-10-17 gregoa * src/app/main.cpp: When ConfClerk is called with arguments (alarm), check for >= 3. Alarmd seems to add an additional argument. * src/alarm/alarm.cpp, src/alarm/alarm.pro, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/app.pro, src/app/main.cpp: Rip out unused DBUS stuff. 2012-10-17 philipp * src/alarm/alarm.cpp: Fixed bug: Arguments for calling ConfClerk in an alarm event were not built correctly. * src/sql/schedulexmlparser.cpp: Changed int to string converstion method because the old method gave an compilation error on MAEMO. * src/alarm/alarm.cpp, src/app/main.cpp, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/tabcontainer.cpp, src/mvc/conference.cpp, src/mvc/conference.h: We added the conferenceId to some alarm related methods (ticket #41). 2012-10-08 gregoa * README: Update URLs in README. 2012-09-25 philipp * src/db.qrc, src/sql/sqlengine.cpp, src/sql/sqlengine.h: Schmema update completed. Finally closing ticket #45. * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/mainwindow.cpp, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp: Reloading a conference works now. * src/sql/sqlengine.cpp: Fixed: Forgot to call query.exec() at several places. * src/dbschema000to001.sql: Added sql file that updates the schema from version 000 to version 001. * src/dbschema001.sql: Changed table names to have small letters. * src/dbschema001.sql: Changed coding style of sql file. 2012-09-25 gregoa * src/mvc/conference.cpp, src/mvc/conference.h, src/sql/schedulexmlparser.cpp, src/sql/sqlengine.cpp: Remove unsed (and removed from db) 'days' column fro xml parser and all sql parts. 2012-09-25 philipp * src/dbschema001.sql: Suggestion for database schema version 001. 2012-09-25 gregoa * src/sql/sqlengine.cpp: Don't insert empty string into picture column. (NOT NULL constraint removed from db schema.) * src/sql/sqlengine.cpp: Remove empty-city-hack. (NOT NULL removed from db schema.) * src/mvc/conference.h: Remove ifdef'd out members 2012-09-06 gregoa * src/sql/sqlengine.cpp: One version for creating the directory is enough :) (Now tested on Windows, too.) 2012-09-05 philipp * src/sql/sqlengine.cpp: Added a second possibility to create the directory and removed the TODO. 2012-09-05 gregoa * src/sql/sqlengine.cpp: fix .mkpath() Creating the "." path works. Is this idiomatic? At least it works (under Windows). TODO left: handle errors. 2012-09-04 philipp * src/app/main.cpp, src/create_tables.sql, src/db.qrc, src/dbschema000.sql, src/dbschema001.sql, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/mvc/conference.cpp, src/mvc/conference.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h: Restructured the SqlEngine. Not yet finished (see "TODO" in the code). 2012-09-04 gregoa * src/alarm/alarm.cpp, src/alarm/alarm.h, src/app/application.cpp, src/app/main.cpp, src/gui/eventdialog.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/settingsdialog.cpp, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/conference.h, src/mvc/event.h, src/mvc/room.h, src/mvc/track.h, src/sql/sqlengine.cpp, src/test/mvc/eventtest.cpp: fix some more header includes * src/sql/sqlengine.h: fix typo in comment 2012-08-27 gregoa * src/mvc/delegate.cpp, src/mvc/eventmodel.cpp: fix #includes (detected by QtCreator and friends on windows) 2012-08-21 philipp * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h: On the way to fix #45. * src/gui/conferenceeditor.cpp: Fixed bug: Changing the conference URL resulted in an error message. 2012-06-13 gregoa * ., confclerk.pro: Add .pro.user.* to svn:ignore and remove it in the release target. * TODO: TODO: new item about duplicate documentation. * README: README: add Stefan to Contact section. 2012-06-12 gregoa * NEWS, src/global.pri: Bump version after 0.5.5 release. * NEWS: Add release date in NEWS. * TODO: remove TODO item (expand/collapse) * NEWS: Add more items to NEWS. * NEWS: Add items to NEWS. * src/alarm/alarm.cpp, src/alarm/alarm.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/application.cpp, src/app/application.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: Add Stefan as a copyright holder to source files, too. * README, data/confclerk.pod: sync copyright notices between README and confclerk.pod 2012-06-12 philipp * src/gui/mainwindow.cpp: Implemented expand/collapse of the event groups. Resolves ticket #31. * src/mvc/eventmodel.cpp: The groups starts at full hours again. * src/mvc/eventmodel.cpp: Philipp's comments to r1444. * README, src/gui/mainwindow.ui, src/icons.qrc, src/icons/collapse.png, src/icons/collapse.svg, src/icons/expand.png, src/icons/expand.svg: Created icons collapse and expand. 2012-05-03 gregoa * src/mvc/eventmodel.cpp: createTimeGroups(): use QDateTime instead of QTime to avoid "midnight overflow". Cf. #42 2012-05-02 philipp * src/orm/ormrecord.h: This at least partly fixes #42 ("fun with time zones"). 2012-05-02 stefan * src/icons/favourite-off.png, src/icons/favourite.blend: Changed inactive favourite icon to match alarm icon style 2012-04-22 gregoa * src/mvc/delegate.cpp: Show the AlarmOff icon in the timegroup header when the group has no alarms set. 2012-04-19 gregoa * README: Update copyright information in README for new icons. 2012-04-19 philipp * src/gui/eventdialog.cpp, src/gui/eventdialog.ui, src/icons.qrc, src/icons/alarm-off.png, src/icons/alarm-on.png, src/icons/alarm.blend, src/icons/appointment-soon-off.png, src/icons/appointment-soon.png, src/mvc/delegate.cpp: Changed the alarm icon due to ticket #40. I haven't tried it because I don't have an N900 device. 2012-04-19 gregoa * NEWS: Update NEWS with recent bug fixes. * README: Update copyright in README for changed icons. 2012-04-19 philipp * src/gui/eventdialog.cpp, src/gui/eventdialog.ui, src/icons, src/icons.qrc, src/icons/add.png, src/icons/appointment-soon-off.png, src/icons/appointment-soon.png, src/icons/dialog-warning.png, src/icons/emblem-new-off.png, src/icons/emblem-new.blend, src/icons/emblem-new.png, src/icons/favourite-off.png, src/icons/favourite-on.png, src/icons/favourite.blend, src/icons/reload.png, src/icons/remove.png, src/icons/search.png, src/icons/today.png, src/mvc/delegate.cpp: Changed favourite icons as a response to ticket #40. 2012-04-18 gregoa * src/gui/mainwindow.cpp: Handle redirects when importing schedules over the network. Fixes: #39 2012-04-06 gregoa * src/sql/schedulexmlparser.cpp: More output on errors. 2012-04-05 gregoa * README, data/confclerk.pod, src/gui/about.ui: Fix typo in docs. * README: Update exmple URLs in README. 2012-03-21 gregoa * README, data/confclerk.pod, src/alarm/alarm.cpp, src/alarm/alarm.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/application.cpp, src/app/application.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/about.ui, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: Update copyright years. * NEWS: Add note about fixed bug to NEWS. 2012-03-21 philipp * src/alarm/alarm.cpp, src/alarm/alarm.h, src/gui/conflictdialogcontainer.cpp, src/gui/eventdialog.cpp, src/mvc/treeview.cpp: Hopefully fixed bug #38: As the alarm message was used to identify the event by setting it to the eventId and in r1359 the alarm message was changed to show the event title, alarms could not be deleted anymore. Therefore, two alarm attributes (int values) were introduced with this commit: "conferenceId" and "eventId" to identify the event and therefore, deleting alarms should work again. Additionally a second (not reported) bug was fixed: Activating an alarm in the treeview set the alarm to the current time plus 10 seconds. However, I don't know for sure whether this commit fixed bug #38 becaus I don't have a maemo device to test it. 2012-03-20 gregoa * src/gui/gui.pro: Removed commented out reference to removed files. 2012-03-20 philipp * src/alarm/calendar.cpp, src/alarm/calendar.h: Deleted calendar.h and calendar.cpp as they are not used. * src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/gui/alarmdialog.ui: Deleted files that don't seem to be used. 2012-03-10 gregoa * README, data/confclerk.pod: typo in docs 2011-12-12 philipp * TODO: Updated the TODO list. * src/gui/mainwindow.cpp, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h: When the search toolbox button is clicked when the search dialog is already open, it is closed. * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: Implemented stub for expand/collape all. * src/gui/daynavigatorwidget.ui: Another layout study. * src/gui/daynavigatorwidget.ui: Changed layout details to study the effect in Maemo. * src/gui/daynavigatorwidget.cpp: Better calculation of the day navigator date position. * src/sql/sqlengine.cpp: Fixed by gregoa: Searching for titles where the events had no person did not find anything. * src/gui/daynavigatorwidget.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h: The search result is now synced with the daynavigator. When the search result is not on the current date, the date is changed. 2011-11-27 gregoa * README: Update URL list in README. 2011-10-17 philipp * src/gui/searchtabcontainer.cpp, src/mvc/event.cpp, src/mvc/eventmodel.cpp: Sorted by duration additionally to start. * src/create_tables.sql, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/daynavigatorwidget.ui, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/mainwindow.cpp, src/mvc/event.h: Implemented "now" action and removed the "now" button from the day navigator. * src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: Removed unused nowEvent functions. * src/gui/mainwindow.cpp, src/gui/mainwindow.ui: Implemented the reload button functionality. Closes: #34 * src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/tabcontainer.cpp: The conflict editor works again. * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/treeview.cpp, src/mvc/treeview.h: The favorite tab gets updated again after changing the favorite state. 2011-10-04 philipp * src/gui/conflictdialogcontainer.cpp, src/gui/conflictsdialog.cpp, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/tabcontainer.ui: Removed the "Now" tab. Removed the day navigator inside tabs. Added a search button in the button bar. Right now, at least the following does not work: * update of favorites * conflict editor * setting favorite in the event dialog 2011-09-21 gregoa * src/gui/searchhead.ui: Search dialog: less width, more lines. * src/gui/mainwindow.ui: Tabs: elide tabtexts. 2011-09-21 philipp * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/mainwindow.cpp, src/gui/tabcontainer.cpp: Implemented "unset dates" in the date navigator. * src/gui/daynavigatorwidget.cpp, src/gui/mainwindow.cpp, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h: The dateChanged signal is transmitted to the tabcontainers now. * src/gui/mainwindow.ui: Introduced a toobar. Added a new global date navigator instance (the "old" ones are not removed yet). * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h: Cleanup daynavigatorwidget. 2011-09-14 gregoa * NEWS: Fix typo in NEWS. * NEWS, src/global.pri: bump version after release * NEWS: Add date to NEWS before release. 2011-09-12 gregoa * NEWS: Add NEWS items for upcoming 0.5.4 release. * NEWS: Add dates to all releases in NEWS. * src/gui/daynavigatorwidget.cpp: Day navigator widget: setDates() - change logic of setting mCurDate: if it's outside the conference range, set it to mStartDate (and not to mEndDate when it's "greater") -- when going to an earlier conference, starting on the last day doesn't really make sense - update() the widget after changing dates. this might be a bit expensive but it ensure that the displayed date is what we want, and since there are many day navigator widgets there's probably no single other place Hopefully closes #36. * src/gui/mainwindow.cpp: Replace some tabs with the usual spaces. 2011-09-06 philipp * src/gui/mainwindow.ui: Assigned confclerk icon to main window. * src/gui/conferenceeditor.cpp: Now the progress bar is shown immediately after clicking the refresh conference button. Closes ticket #25. * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/tabcontainer.cpp, src/mvc/treeview.cpp: Fixed ticket #26 (empty tabs after some actions). 2011-09-06 stefan * src/gui/mainwindow.cpp, src/sql/sqlengine.cpp: Fixed ticket #20 2011-09-06 philipp * src/orm/ormrecord.h: Removed one comment and fixed typos. 2011-09-06 gregoa * README, data/confclerk.pod: Mention frab (FrOSCon penta clone) and Grazer Linuxtage (fixes #33). 2011-08-23 philipp * src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: Rewrote code to group events together with gregoa. Closes bug #22. * src/mvc/delegate.cpp: This should close ticket #35 ([maemo] conflict icon overlaps alarm icon). * src/gui/tabcontainer.ui, src/mvc/delegate.cpp, src/mvc/delegate.h: Changed the drawing of events to make use of system colors and styles, at least partially. 2011-08-16 gregoa * NEWS, src/global.pri: bump version after release * NEWS: Remove "TODO" from NEWS, a.k.a. prepare for release 2011-08-15 gregoa * NEWS: Update NEWS. * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.ui: Improve day navigator widget. (Still black magic, now even with #ifdefs :/) * src/sql/sqlengine.cpp: .isEmpty() feels more Qtish then == "" * src/gui/conferenceeditor.cpp: Only add ", $venue" to conference location when $venue is not empty. * src/gui/conferenceeditor.cpp: ISO formatting of conference dates in conferenceeditor. * src/sql/sqlengine.cpp: Quick fix for ticket: #32: if the schedule XML doesn't contain a city, we put "n/a" there. In the long run we might want to find a system for changing the database scheme; too bad sqlite has only limited ALTER TABLE support. * src/sql/schedulexmlparser.cpp: emit the parsingScheduleBegin() signal earlier, so we get the progressbar a bit earlier (cf. ticket #25) * README, data/confclerk.pod, src/gui/about.ui: mention FrOSCon as an example (although it's not working at the moment, cf. #32) 2011-07-24 gregoa * src/gui/conferenceeditor.cpp: Use "-" in start-end. Closes: #30 * src/gui/daynavigatorwidget.cpp: Shift date text up by icon/2 in order to re-center the text. More or less at least. * NEWS, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/daynavigatorwidget.ui, src/icons.qrc, src/icons/today.png: Add today button to date navigator. TODO: date is not centered between prev/next arrows anymore. Cf. #29 2011-07-23 gregoa * src/alarm/alarm.pro: Make sure to remove src/bin/libqalarm.a on make clean. * NEWS, src/global.pri: bump version after release * NEWS: Prepare NEWS before release of 0.5.2. * src/sql/sqlengine.cpp: Remove conference/room records unconditionally from EVENT_ROOMS 2011-07-22 gregoa * src/sql/sqlengine.cpp: SqlEngine::addRoomToDB: remove event/conference combinations from EVENT_ROOM that are already there. Should avoid duplicates on updates where the room name changes. Hopefully fixes ticket #24. * data/confclerk.pod: manpage: s/Desafinado/ConfClerk/ 2011-07-19 philipp * src/gui/conferenceeditor.ui: Fixed ticket #23: No close button in conference dialog when no confernces are in the list. 2011-07-14 gregoa * confclerk.pro: Don't include tarballs in release tarballs ... * src/mvc/delegate.cpp: Distinguish "Presenter" and "Presenters" (instead of "Presenter(s)"). Closes: Ticket #17 * src/alarm/alarm.cpp, src/alarm/alarm.h, src/gui/eventdialog.cpp, src/mvc/treeview.cpp: Show event title instead of id in alarms. * confclerk.pro: Don't remove generated files in DISTCLEAN; otherwise they are gone during package builds :/ * TODO: Add a TODO item. * confclerk.pro, src/gui/gui.pro, src/mvc/mvc.pro, src/orm/orm.pro, src/sql/sql.pro: Reorganize CLEAN and DISTCLEAN targets. * NEWS, src/global.pri: Bump VERSION after release. * ChangeLog, confclerk.pro: Remove ChangeLog from svn (it's created via svn2cl, so this is circular). Add generated files to distclean target. 2011-07-13 gregoa * ChangeLog: Update ChangeLog before release. * NEWS: NEWS entry for 0.5.1 release. 2011-07-13 philipp * src/mvc/delegate.cpp: This is just a quick-and-dirty workaround commit to aviod a drawing problem on maemo. This commit might be reverted ... * src/gui/searchhead.ui: The speaker is preselected in the search dialog now. * src/mvc/delegate.cpp: First try to improve the colors (ticket #13). * src/gui/mainwindow.cpp, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/settingsdialog.ui: The cancel button on the settings dialog works now (ticket #14) and the layout of the settings dialog is stable now (ticket #15). * src/gui/mainwindow.ui: Changed the menu to be non-hierarchical. Closes ticket #16. * src/gui/daynavigatorwidget.cpp: Changed the placement of the date label again. Changed the date format to show the day-of-week. * src/gui/daynavigatorwidget.cpp: Replaced "130" by s.width() when centering the date. 2011-07-12 philipp * src/sql/sqlengine.cpp: This commit closes ticket #12. The search terms are ANDed now and a call to trimmed() before splitting the search string avoids problems with leading/trailing spaces. 2011-07-11 philipp * src/mvc/event.cpp: Before querying the SEARCH_EVENT table, its existence is checked. Therefore a command line debug error message is avoided. This commit partly fixes ticket #10. * src/gui/errormessage.cpp: Error messages reported with the function error_essage are no longer writted to std:error because they are shown to the user anyway. This commit partly resolves ticket #10. * src/gui/eventdialog.ui: The description and person list of the event dialog is now selectable so that copy&paste is possible. 2011-07-10 philipp * src/gui/about.ui, src/gui/mainwindow.cpp: Tuned the about dialog. * src/gui/conferenceeditor.ui: Minor tuning of the conference editor. The reload button now has a text on it. * src/sql/sqlengine.cpp: Fixed bug (related to ticket #12): Only the last search term is used. * src/sql/sqlengine.cpp: Undid changes to sqlengine.cpp I committed accidentally in r1318. 2011-07-08 gregoa * src/sql/sqlengine.cpp: Split search keyword string on whitespace. * src/sql/sqlengine.cpp: Avoid duplicate search results by using SELECT DISTINCT when filling the SEARCH_EVENT table. 2011-07-05 gregoa * README: Add DebConf11 URL to README. 2011-07-04 philipp * src/gui/conferenceeditor.ui: Cleaning of the conferenceeditor dialog. * src/create_tables.sql, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conferenceeditor.ui, src/gui/gui.pro, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/gui/mapwindow.ui, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/icons.qrc, src/icons/applications-internet.png, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/sql/schedulexmlparser.cpp, src/sql/sqlengine.cpp, src/sql/sqlengine.h: Removed the ability to show "pictures" (maps) of rooms and maps of conferences. The XML file does not contain picture/map/image information of conferences or rooms. We left the room.picture definition in the database SQL because there is no "drop column" in sqlite. * src/gui/mainwindow.ui: Removed the unused status bar. 2011-06-29 gregoa * src/app/app.pro, src/gui/gui.pro, src/mvc/mvc.pro, src/test/test.pro: Some more s;TARGETDEPS;POST_TARGETDEPS; * data/confclerk.desktop, data/confclerk.pod: s;scheduler;schedule application; * ChangeLog, NEWS, src/global.pri: Bump version * ChangeLog: Update changelog. 2011-06-28 philipp * src/gui/conferenceeditor.cpp, src/gui/daynavigatorwidget.cpp, src/gui/eventdialog.cpp, src/gui/mainwindow.cpp, src/gui/searchhead.cpp, src/mvc/eventmodel.cpp, src/mvc/treeview.cpp, src/orm/ormrecord.h, src/sql/sqlengine.cpp: Removed many of the qDebug() output lines (see ticket #10). 2011-06-28 gregoa * README, data/confclerk.pod: add copyright/license for exchanged icons 2011-06-28 philipp * src/icons/emblem-new-off.png, src/icons/emblem-new.blend, src/icons/emblem-new.png: Replaced the star icons with self-made versions (Blender 2.57b) that are better distinguishable. Closes ticket #8. 2011-06-27 philipp * confclerk.pro, src/app/main.cpp, src/global.pri, src/gui/about.ui, src/gui/mainwindow.cpp: Included application version in the about dialog. This closes ticket #9. 2011-06-26 philipp * src/gui/eventdialog.cpp, src/gui/eventdialog.ui: Links in events are now clickable (resolves ticket #4). * src/gui/searchtabcontainer.cpp, src/mvc/conference.h: Searching without active conference doesn't give an error message anymore (resolves ticket #7). * src/gui/searchtabcontainer.cpp, src/sql/sqlengine.cpp: The '%' character doesn't have to be escaped anymore. * src/gui/mainwindow.ui: The window title was still "FOSDEM Schedule". 2011-06-25 gregoa * ChangeLog, NEWS: Add entries to NEWS file. * TODO: Shorten TODO. * ChangeLog, confclerk.pro, data/confclerk.pod: Create a simple man page. * README, TODO: Add URLs for FOSDEM 2011, DebConf 2010, and 27C3 to README instead of TODO. * TODO, src/fosdem.sql, src/schedule.en.xml: Remove the remaining last two fosdem files. * ChangeLog, README, TODO: Update contact info. 2011-06-25 philipp * BUGS: Bugs are now reported in the trac system. 2011-06-24 gregoa * BUGS, ChangeLog: Mark bug 3 as fixed. 2011-06-24 philipp * src/gui/searchhead.cpp: Enter or return triggers the search now when the focus is at the searchEdit or at one of the checkboxes. * BUGS: Filed bug 7: Error message when searching without having conferences 2011-06-24 gregoa * BUGS: Add another wishlist (more: design discussion) bug 2011-06-24 philipp * src/gui/tabcontainer.h, src/mvc/eventmodel.cpp: Removed unnecessary debug output and code. * BUGS, src/mvc/event.cpp: Fixed bug reported by gregor: Too many authors are shown (form other conferences as well). 2011-06-24 gregoa * ChangeLog, TODO, confclerk.pro: Improve release target in .pro 2011-06-24 philipp * src/gui/daynavigatorwidget.cpp, src/mvc/treeview.cpp: Removed two unused variables to avoid compiler warnings. 2011-06-24 gregoa * src/gui/alarmdialog.cpp, src/sql/sqlengine.cpp, src/test/mvc/eventtest.cpp: Somewhere a slash was missing ... * TODO: Updated TODO. 2011-06-23 gregoa * README: Add contact info to README. * src/gui/about.ui: Update 'About' dialog. * TODO, src/app/app.pro, src/app/main.cpp, src/maps, src/maps.qrc, src/sql/sqlengine.cpp: Remove ULB, Campus Solbosch maps. * ., ChangeLog, TODO, confclerk.pro, data/fosdem-schedule.svg, fosdem-schedule.pro, src/app/app.pro: The big rename. Which was not so big after all ... * data/26x26, data/40x40, data/48x48, data/64x64, data/Makefile, data/confclerk.desktop, data/maemo: De-maemofy: make .desktop file generic, remove resized (old) icons and Makefile for installing them. * src/app/app.pro: Add new resource file to app.pro * data/data.qrc, src/app/main.cpp, src/gui/about.ui, src/gui/alarmdialog.ui, src/gui/conferenceeditor.ui, src/icons.qrc, src/icons/brain-alone.png, src/icons/fosdem.png: Icons, part 2: replace fosdem/brain icons with ConfClerk logo * README, TODO, src/gui/conferenceeditor.ui, src/gui/eventdialog.cpp, src/gui/eventdialog.ui, src/icons.qrc, src/icons/add.png, src/icons/alarm-offBig.png, src/icons/alarm-onBig.png, src/icons/applications-internet.png, src/icons/appointment-soon-off.png, src/icons/appointment-soon.png, src/icons/compassBig.png, src/icons/dialog-warning.png, src/icons/emblem-new-off.png, src/icons/emblem-new.png, src/icons/exclamation.png, src/icons/favourite-offBig.png, src/icons/favourite-onBig.png, src/icons/reload.png, src/icons/remove.png, src/icons/search.png, src/mvc/delegate.cpp: Icons part 1: replace all icons (except the FOSDEM ones) with icons from current gnome-icon-theme * src/gui/mainwindow.ui, src/icons.qrc, src/icons/collapse.png, src/icons/expand.png, src/icons/info.png, src/icons/settings.png: Remove unused icons. * src/gui/alarmdialog.cpp: Another instance of the databasename. (NOTE: untested, this codepath is only used on maemo) * TODO, src/app/appsettings.cpp, src/app/main.cpp, src/sql/sqlengine.cpp: Move config and sqlite database. They are both at the xdg-specified locations now: ~/.local/share/data/Toastfreeware/ConfClerk/ConfClerk.sqlite ~/.config/Toastfreeware/ConfClerk.conf * src/alarm/alarm.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptorp.h, src/app/main.cpp: Rename DBus service. Hopefully successful. * TODO: Add some conference URLs to TODO * BUGS: New bug noted. * BUGS: New bug noted. * src/app/app.pro, src/gui/gui.pro, src/mvc/mvc.pro: qmake warning: POST_TARGETDEPS instead of TARGETDEPS * fosdem-schedule.pro: Remove libs in clean target. * ChangeLog, README, TODO, data/confclerk.svg, data/fosdem-schedule.svg, fosdem-schedule.pro, src/icons/appicon.svg: Move and rename logo, create a target to convert it in .pro, add copyright/license to README. Update TODO. 2011-06-23 philipp * BUGS: Checked the remaining code. Didn't find possibilities for SQL injections anymore. 2011-06-23 gregoa * TODO: Update TODO. * ChangeLog, fosdem-schedule.pro: Add release and changelog targets to project file. * Changelog: Remove empty Changelog. 2011-06-23 philipp * src/sql/sqlengine.cpp: Prevented SQL injections in function addPersonToDB. 2011-06-23 gregoa * src/alarm/alarm.cpp, src/alarm/alarm.h, src/alarm/calendar.cpp, src/alarm/calendar.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/application.cpp, src/app/application.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: Add copyright to source. * src/alarm/alarm.cpp, src/alarm/alarm.h, src/alarm/calendar.cpp, src/alarm/calendar.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/application.cpp, src/app/application.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: Update GPL blurb in source files. 2011-06-23 philipp * src/icons/appicon.svg: Just adapted the page size to be rectangular. * src/icons/appicon.svg: This suggestion/"doodle"* for the new application icon was created just now by Christian Kling who (he is sitting next to me right now) agreed to publish it under the GNU GPL (v2 or later). *Christian's words. 2011-06-23 gregoa * TODO, debian: Remove ./debian directory, we'll do the packaging outside the "upstream" repository. * AUTHORS, INSTALL, NEWS, README, TODO, docs/fosdem-schedule, docs/fosdem-schedule/AUTHORS, docs/fosdem-schedule/Changelog, docs/fosdem-schedule/INSTALL, docs/fosdem-schedule/NEWS, docs/fosdem-schedule/README, docs/fosdem-schedule/user-stories.txt, docs/user-stories.txt: First round of documentation updates. * ChangeLog, fosdem-schedule.pro: Prepare ChangeLog generation from svn logs. 2011-06-23 philipp * src/sql/sqlengine.cpp: Prevented SQL injection in function addLinkToDB. 2011-06-23 gregoa * TODO: update TODO 2011-06-23 philipp * src/sql/sqlengine.cpp: Fixed SQL error in searchEvent when no table was selected. Prevented SQL injection in searchEvent. 2011-06-23 gregoa * TODO: add TODO file 2011-06-23 philipp * src/gui/mainwindow.cpp, src/gui/tabcontainer.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/orm/ormrecord.h: Added some comments, removed and added some debug information. * src/sql/sqlengine.cpp: Fixed a bug I introduced when reparing the addRoomToDB function. * src/mvc/track.cpp, src/mvc/track.h, src/sql/sqlengine.cpp: Tracks are inserted now when importing new conferences. * src/sql/sqlengine.cpp: void possible SQL injection in function addRoomToDB. * src/app/app.pro: Removed copying the fosdem.sqlite database during the make process. 2011-06-22 philipp * src/db.qrc, src/sql/sqlengine.cpp: The database is now created from the program. We don't need to copy or provide fosdem.sqlite anymore. * BUGS, src/sql/sqlengine.cpp: Persons are deleted now when a conference is removed. * BUGS: Added a file with bugs that I noticed when playing with the application. * src/sql/sqlengine.cpp: Rooms are inserted now for additionally imported conferences. * src/create_tables.sql: Importing persons for multiple conferences works now. * src/create_tables.sql, src/sql/sqlengine.cpp: Changed UNIQUE statements in the database table definition so that they make sense for multiple conferences and do no not prevent successful imports. 2011-06-22 gregoa * src/mvc/track.cpp, src/mvc/track.h, src/sql/sqlengine.cpp: Insert new field xid_conference into table track, room and person. 2011-06-21 philipp * src/create_tables.sql: Created schema for the database with additional colum xid_conference in the tables track, room and person. * src/gui/mainwindow.ui: Added menu item "quit". * ., src/app, src/gui, src/mvc, src/sql: Ignored some files that were created during the build. * fosdem-schedule.pro: Removed data directory from subdirs so that the manually created Makefile is not overwritten by qmake -r. * src/app/app.pro: Removed dbus dependency on non-maemo platforms. 2010-05-05 kirilma * src/mvc/delegate.cpp: use enabled flag instead of repeated criateria check * src/mvc/delegate.cpp, src/mvc/delegate.h: add enabled flag * src/mvc/delegate.cpp, src/mvc/delegate.h: refactor: more compact drawing of controls * src/mvc/delegate.cpp, src/mvc/room.h: do not draw showmap button for event is there is no map for its room * src/gui/tabcontainer.cpp, src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h: refactor: cache whole Room object in Event * src/fosdem.sql, src/gui/tabcontainer.cpp, src/mvc/room.h, src/sql/schedulexmlparser.cpp: store room map in database show it if it's available, otherwise show a warning set proper values in default database new rooms imported as without maps * src/fosdem.sql, src/gui/conferenceeditor.cpp, src/mvc/conference.cpp, src/mvc/conference.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h: store path to conference map in database path stored as additional field in conference table if it's null or empty, "Show map" button is not shown if existing database does not have the field, it will be automatically added 2010-05-04 kirilma * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.ui, src/gui/settingsdialog.cpp, src/gui/settingsdialog.ui: UI tune: use buttonBox instead of single buttons to comply with platform conventions maemo5 does not print "Cancel" buttons, and names "OK" differently just use buttonBox, and it will behave properly at each platform 2010-04-23 kirilma * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conferenceeditor.ui, src/gui/mainwindow.cpp, src/gui/mainwindow.h: restore viewing of conference map * src/gui/conferenceeditor.cpp, src/gui/urlinputdialog.ui: minor UI fixes fix size of UrlInputDialog restore [remove] button at the same button as [add] 2010-04-22 kirilma * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h: remove obsoleted code also fix some types * src/gui/mainwindow.cpp, src/gui/mainwindow.h: optimization * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.ui: fine tune geometry to look nicer * AUTHORS, debian/copyright: add authors for files * src/gui/conferenceeditor.cpp, src/gui/conferenceeditor.h, src/gui/conferenceeditor.ui, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/urlinputdialog.cpp, src/gui/urlinputdialog.h, src/gui/urlinputdialog.ui, src/icons.qrc, src/icons/add.png, src/icons/reload.png, src/icons/remove.png, src/mvc/conference.h, src/mvc/conferencemodel.cpp, src/mvc/conferencemodel.h, src/mvc/mvc.pro, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h: reworked UI for conference editing underlying representation of conference list is also changed * src/sql/schedulexmlparser.h: CC: fix endlines 2010-04-16 kirilma * src/app/app.pro, src/app/application.cpp, src/gui/errormessage.cpp, src/gui/errormessage.h, src/gui/gui.pro, src/gui/importschedulewidget.cpp, src/sql/schedulexmlparser.cpp: use visible notifications of errors also early detect parsing errors 2010-04-15 kirilma * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.ui: make label shorter to place all required buttons * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: fix deletion of last conference implement for cleaning all views in the tabs clean the models when no active conference found fix cleaning model and signalling views * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/conference.cpp, src/mvc/conference.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h: implement deleting a conference pass event about it to mainwindow to update select control fix Conference::activeConference() to work when first conference is removed * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/mvc/conference.h: add buttons for refreshm new url and delete and partly implement corresponding actions also changed Online -> Refresh delete action is not implemented yet * src/fosdem.sql, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/mvc/conference.cpp, src/mvc/conference.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp: store URL's for conferences * use it at update * let user update the url before request * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.ui, src/sql/sqlengine.cpp, src/sql/sqlengine.h: remove unused code * src/fosdem.sql: fix references in SQL 2010-04-14 kirilma * src/gui/about.ui, src/gui/alarmdialog.ui, src/gui/conflictsdialog.ui, src/gui/daynavigatorwidget.ui, src/gui/eventdialog.ui, src/gui/importschedulewidget.ui, src/gui/mainwindow.ui, src/gui/mapwindow.ui, src/gui/searchhead.ui, src/gui/settingsdialog.ui: save output from updater QT designer update all ui files to the output format of the new Qt Designer (version: 4.5.3really4.5.2-0ubuntu1) to avoid unrelated changes in SCM later 2010-04-13 kirilma * src/gui/gui.pro, src/gui/tabwidget.cpp, src/gui/tabwidget.h: remove unused class TabWidget * src/gui/gui.pro, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/proxysettingsdialog.cpp, src/gui/proxysettingsdialog.h, src/gui/proxysettingsdialog.ui, src/gui/settingsdialog.cpp, src/gui/settingsdialog.h, src/gui/settingsdialog.ui: move Settings and About to Window Menu * remove Setting and About controls from widgets * make instead a window menus with the corresponding actions * rename "Proxy settings" to "Settings", placing the proxy button in a control group 2010-04-12 kirilma * src/app/app.pro: build fix at maemo force order of computation some versions of qmake-qt4 require it * src/fosdem.sql: remove ON CONFLICE REPLACE for events * src/app/app.pro, src/fosdem.sql, src/fosdem.sqlite: generate default database instead of using binary one * src/sql/sqlengine.cpp: fix event insert or update * add error reporting for queries * actually run check query * properly get conference_is from event * fix checking of non-empty result * fix insert query * src/app/app.pro, src/app/application.cpp, src/app/application.h, src/app/main.cpp: catch exceptions which leak outside of event handlers If we do not do this, QT will exit from event loop. 2010-04-09 kirilma * src/sql/sqlengine.cpp: use update for events when they are already exists also use only parameters substitution for these queries * src/sql/schedulexmlparser.cpp, src/sql/sqlengine.cpp, src/sql/sqlengine.h: use transactions to make import faster 2010-03-03 uzakmat * data/maemo/fosdem-schedule.desktop, debian/changelog, src/gui/about.ui: Preparing for release 0.4.1 2010-03-03 timkoma * src/alarm/alarm.cpp, src/mvc/event.cpp, src/sql/sqlengine.cpp: UTC/LocalTime fix for import conference XML, DB queries for multiple conferences fixes 2010-02-05 timkoma * src/fosdem.sqlite, src/sql/sqlengine.cpp: fix for import - ON CONFLICT REPLACE 2010-02-05 uzakmat * data/maemo/fosdem-schedule.desktop, debian/changelog, src/alarm/alarm.cpp, src/gui/about.ui: alarm UTC/localtime fix 2010-02-03 uzakmat * INSTALL: addition of Diablo specific installation instructions in INSTALL * data/Makefile, data/maemo/fosdem-schedule.desktop: installation of 40x40 icons enabled because of Diablo * NEWS, debian/changelog, src/gui/about.ui: release information added for release 0.3 2010-02-03 timkoma * src/mvc/event.cpp, src/mvc/event.h: performance improvement for Events * src/mvc/event.cpp, src/mvc/event.h: performance improvement for load persons 2010-02-02 uzakmat * NEWS: NEWS file update * src/alarm/alarm.cpp, src/alarm/alarm.h, src/alarm/calendar.cpp, src/alarm/calendar.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/appsettings.cpp, src/app/appsettings.h, src/app/main.cpp, src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/proxysettingsdialog.cpp, src/gui/proxysettingsdialog.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/tabwidget.cpp, src/gui/tabwidget.h, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h, src/test/main.cpp, src/test/mvc/eventtest.cpp, src/test/mvc/eventtest.h: A header with the proper copyright/lincence statement was added into each source/header file. 2010-02-02 pavelpa * src/alarm/alarm.cpp: corrected 'exec' path when adding an alarm 2010-02-02 uzakmat * NEWS: NEWS file updated * AUTHORS, INSTALL, README, debian/changelog: README, INSTALL, AUTHORS - filled in 2010-02-02 hanzes * src/alarm/alarm.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h: Alarm modifications 2010-02-01 hanzes * src/mvc/treeview.cpp: Alarm dbus connection added * src/alarm/alarm.cpp, src/alarm/alarm.pro, src/alarm/alarmdbus.cpp, src/alarm/alarmdbus.h, src/alarm/alarmdbusadaptor.cpp, src/alarm/alarmdbusadaptorp.h, src/app/alarmdbus.cpp, src/app/alarmdbus.h, src/app/alarmdbusadaptor.cpp, src/app/alarmdbusadaptorp.h, src/app/app.pro, src/app/main.cpp, src/mvc/mvc.pro, src/mvc/treeview.cpp, src/src.pro: Alarm dbus connection added 2010-02-01 pavelpa * src/mvc/delegate.cpp: gradient for treeview items * src/sql/sqlengine.cpp: changed permissions for the db - TODO: check it on the device * src/app/main.cpp, src/src.pro: compilation error fix * src/app/main.cpp: compilation error fix * src/gui/mapwindow.cpp: N810 changes: maximized 'map' dialog 2010-02-01 hanzes * src/alarm/alarm.cpp, src/alarm/alarm.pro, src/alarm/alarmdbus.cpp, src/alarm/alarmdbus.h, src/alarm/alarmdbusadaptor.cpp, src/alarm/alarmdbusadaptorp.h, src/app/app.pro, src/app/main.cpp, src/gui/gui.pro, src/mvc/treeview.cpp, src/src.pro: Alarm dbus connection added 2010-02-01 pavelpa * src/gui/importschedulewidget.ui, src/icons.qrc, src/icons/settings.png: added 'settings' icon for setting-up proxy(network connection) * src/global.pri, src/gui/mainwindow.cpp, src/gui/tabcontainer.cpp, src/orm/ormrecord.h: GUI changes for N810 device 2010-02-01 uzakmat * debian/control, debian/copyright: debian/control - Build-Depends section set 2010-02-01 pavelpa * src/app/app.pro, src/app/main.cpp, src/db.qrc, src/fosdem.sqlite, src/sql/sqlengine.cpp: created resource which contains parsed schedule, so the user doesn't have to parse it by himself 2010-02-01 uzakmat * src/alarm/alarm.cpp: alarm - example of dbus binding functional 2010-02-01 pavelpa * src/schedule.en.xml: updated schedule.en.xml to the newest version 2010-01-30 pavelpa * src/gui/about.ui, src/gui/eventdialog.ui, src/icons.qrc, src/icons/brain-alone.png: changed fosdem icon in about dialog to brain-alone icon * src/gui/about.ui: changed copyright string * src/mvc/delegate.cpp: number of events/alarms/favs is bottom-aligned to the bottom of the icons 2010-01-29 pavelpa * src/app/appsettings.cpp, src/app/appsettings.h, src/gui/mainwindow.cpp: if the application is run for first time, network connection is set to Direct connection 2010-01-29 uzakmat * src/alarm/alarm.cpp: initial binding of alarm to a DBus call 2010-01-29 pavelpa * src/app/app.pro, src/app/appsettings.cpp, src/app/appsettings.h, src/gui/gui.pro, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/gui/mainwindow.cpp, src/gui/proxysettingsdialog.cpp, src/gui/proxysettingsdialog.h, src/gui/proxysettingsdialog.ui: implemented 'proxy settings' dialog - user can secify proxy for network communication * src/app/app.pro, src/gui/gui.pro, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/mainwindow.cpp: implemented importing the schedule from the Internet - usded url: http://fosdem.org/2010/schedule/xml - todo: hard-coded PROXY has to be fixed (add proxy settings dialog) * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/treeview.cpp: possible to have multiple conferences in the DB - possible to switch among them - conference schedules have to follow FOSDEM conference xml structure - 'select Conference' bar is visible only if there are more than one conference available * src/gui/about.ui, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.ui: modified 'about' dialog - changed "Qt FOSDEM" -> "FOSDEM Schedule" 2010-01-28 pavelpa * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/searchtabcontainer.cpp, src/mvc/event.cpp, src/sql/sqlengine.cpp: search fixed - only the dates (range) which contain at least one event are selectable - if there is only one event at a specified date - user can't switch to the next/prev date - if search gives no results - a message is displayed to inform user about it * src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h: forgotten in previous commit * src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/treeview.cpp, src/mvc/treeview.h: some performance optimizations - favourities reloaded only if they have really changed - otherwise only event in the question is updated * src/mvc/event.cpp: fixed 'conflicts' constrains * src/mvc/event.cpp: 'now' events - displayed real now events, not just the testing ones 2010-01-28 uzakmat * src/app/app.pro: binary name changed to fosdem-schedule 2010-01-28 pavelpa * src/mvc/event.cpp: changed conditions for conflicts * src/gui/eventdialog.cpp, src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/treeview.cpp, src/sql/sqlengine.cpp: some 'delegate' drawing optimizations - removed EVENT_CONFLICT table - used one SQL SELECT instead * src/mvc/treeview.cpp: conflicts updated correctly - TODO: needs to do some drawing optimizations 2010-01-28 uzakmat * data/Makefile, data/maemo/fosdem-schedule.desktop, data/maemo/fosdem.desktop, debian/control, fosdem-maemo.pro, fosdem-schedule.pro: package details updated to reflect the binary name change to fosdem-maemo 2010-01-28 pavelpa * src/gui/mainwindow.cpp, src/gui/searchhead.ui: if no conference is in the DB, the user is automatically navigated to the conference tab, so he can import one * src/gui/mainwindow.cpp, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/tabcontainer.cpp: search tab - header is hidden in case no conf exists in the DB * src/gui/eventdialog.ui: event dialog GUI refactoring * src/gui/about.ui, src/gui/mainwindow.ui: about dialog - added GNU GPL v2 notice * src/gui/daynavigatorwidget.cpp, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/tabwidget.cpp: conference tab header is hidden if there isn't active conference - handled some warnings 2010-01-27 pavelpa * src/gui/mainwindow.ui: tabs' order changed * src/gui/mainwindow.cpp, src/gui/nowtabcontainer.h: 'nowTab' updated/loaded when application starts * src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h: 'nowTab' list is automatically expanded * src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/tabcontainer.h: 'conflict' list is automatically expanded * src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/favtabcontainer.cpp, src/gui/tabcontainer.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: 'conflict' dialog now contains list of events in conflict with given eventId * src/gui/mainwindow.cpp: fixed 'copy-paste' error * src/gui/conflictdialogcontainer.cpp, src/gui/conflictdialogcontainer.h, src/gui/conflictsdialog.cpp, src/gui/conflictsdialog.h, src/gui/conflictsdialog.ui, src/gui/daynavigatorwidget.cpp, src/gui/gui.pro, src/gui/mainwindow.ui, src/gui/searchtabcontainer.cpp, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/treeview.cpp, src/mvc/treeview.h, src/orm/ormrecord.h: implemented 'conflicts' dialog - displays rooms instead of conflicts for now - needs to implement additional methods in Event, ... * src/gui/eventdialog.cpp: 'alarm' button is hidden for not MAEMO 2010-01-27 timkoma * src/gui/searchtabcontainer.cpp, src/gui/tabcontainer.ui, src/orm/ormrecord.h: search fix 2010-01-27 pavelpa * src/gui/favtabcontainer.h, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/trackstabcontainer.h, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h: removed headers from *.h and *.cpp * src/app/app.pro, src/app/appsettings.cpp, src/app/appsettings.h, src/gui/alarmdialog.cpp, src/gui/eventdialog.cpp, src/gui/favtabcontainer.cpp, src/gui/mainwindow.cpp, src/gui/searchtabcontainer.cpp, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/mvc/conference.cpp, src/mvc/conference.h, src/mvc/eventmodel.cpp, src/sql/sqlengine.cpp: removed appsettings - created 'active' column in 'conference' table 2010-01-27 timkoma * src/app/app.pro, src/gui/dayviewtabcontainer.cpp, src/gui/dayviewtabcontainer.h, src/gui/favtabcontainer.cpp, src/gui/favtabcontainer.h, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/gui/nowtabcontainer.cpp, src/gui/nowtabcontainer.h, src/gui/roomstabcontainer.cpp, src/gui/roomstabcontainer.h, src/gui/searchhead.cpp, src/gui/searchhead.h, src/gui/searchhead.ui, src/gui/searchtabcontainer.cpp, src/gui/searchtabcontainer.h, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/tabcontainer.ui, src/gui/trackstabcontainer.cpp, src/gui/trackstabcontainer.h: refactoring of the TABS 2010-01-27 pavelpa * src/gui/about.ui: modified 'about application' dialog * src/gui/eventdialog.cpp, src/mvc/event.cpp, src/mvc/event.h: implemented 'links' in Event/EventDialog * src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/eventdialog.ui: refactored Event 'details' dialog - TODO: implement 'links' method(s) in Event and use it in the dialog * src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/eventdialog.ui, src/gui/tabcontainer.cpp: Event 'details' dialog now contains also 'favourite' and 'alarm' buttons, so the user can set/unset the property directly from the dialog * src/gui/tabwidget.cpp: 'info' icon scaled to height of tabBar * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/tabcontainer.ui: 'search' tab functionality moved to 'tabcontainer' * src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/treeview.cpp, src/sql/sqlengine.cpp: 'conflicts' modifications - preparing for the dialog showing also list of events in the conflict - created 'EVENT_CONFLICT' for flaging events in conflict state - TODO: not finished 2010-01-26 pavelpa * src/icons.qrc, src/icons/exclamation-iconOff.png, src/icons/exclamation-iconOn.png, src/icons/exclamation.png, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/treeview.cpp: conflicts refactoring - has to be finished * src/app/main.cpp, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sqlengine.h: SqlEngine made STATIC * src/app/app.pro, src/app/main.cpp, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/gui/tabcontainer.cpp, src/gui/tabcontainer.h, src/gui/tabcontainer.ui, src/sql/sqlengine.h: implemented 'tab container' widget, which groups daynavigator with treeview - moved functionality from mainwindow to tabcontainer - TODO: 'search' tab not done yet 2010-01-26 uzakmat * AUTHORS, COPYING, Changelog, INSTALL, NEWS, README: Addition of files required by the GNU coding standard 2010-01-26 timkoma * src/sql/sqlengine.cpp: unique constraints added into sql 2010-01-26 pavelpa * src/gui/mainwindow.ui: just removed unused button on 'day view' tab * src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/gui/mainwindow.cpp: reimplemented 'import schedule' 2010-01-26 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.ui: reload favourites 2010-01-26 uzakmat * src/alarm/alarm.cpp: Alarm implementation modified 2010-01-26 pavelpa * src/gui/mainwindow.cpp, src/gui/mainwindow.ui: removed 'MainMenu' bar from MainWindow - schedule is imported via 'conference' tab - about app is launched when user clicks 'info' button/icon * src/gui/gui.pro, src/gui/importscheduledialog.cpp, src/gui/importscheduledialog.h, src/gui/importscheduledialog.ui, src/gui/importschedulewidget.cpp, src/gui/importschedulewidget.h, src/gui/importschedulewidget.ui, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h: import schedule dialog - changed to widget - moved to 'conference' tab 2010-01-26 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/icons.qrc, src/icons/search.png: search done 2010-01-26 hanzes * src/gui/mainwindow.cpp, src/gui/mainwindow.h: NowTreeView refresh modified 2010-01-26 pavelpa * src/gui/mainwindow.ui: "conference" tab - GUI modifications * src/gui/mainwindow.cpp, src/icons.qrc, src/icons/info.png: About Application dialog is opened when "info" icon is clicked 2010-01-26 hanzes * src/alarm/calendar.cpp, src/alarm/calendar.h: Useless calendar class 2010-01-26 pavelpa * src/gui/gui.pro: forgotten in last CI * src/gui/mainwindow.ui, src/gui/tabwidget.cpp, src/gui/tabwidget.h: new TabWidget - contains "info" icon/button to show "AboutApplication" dialog 2010-01-25 timkoma * src/gui/mainwindow.ui: search update 2010-01-25 korrco * src/mvc/room.cpp: room view added - finished * src/gui/mainwindow.cpp: room view added - finished 2010-01-25 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/sql/sqlengine.cpp, src/sql/sqlengine.h: search upgrade 2010-01-25 korrco * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/mvc.pro, src/mvc/room.cpp, src/mvc/room.h, src/mvc/track.cpp, src/mvc/track.h: room view added - need to test it 2010-01-25 pavelpa * src/mvc/eventmodel.cpp: updated also groupings item (event parent item) if the user clicks eg. favourite/alarm icon (changes event data) * src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/eventdialog.ui: GUI work on Event Details dialog 2010-01-25 uzakmat * data/Makefile, debian/changelog, debian/control, debian/postinst, debian/postrm, debian/rules: postinst and postrm scripts added into the debian tree 2010-01-25 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/event.cpp, src/orm/ormrecord.h, src/sql/sqlengine.cpp: search update 2010-01-25 korrco * src/gui: project synchronisation 2010-01-22 fortefr * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/delegate.cpp: Conference map 2010-01-22 pavelpa * src/gui/mainwindow.cpp: fixed problem with storing conference ID to AppSettings * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/daynavigatorwidget.ui, src/gui/mainwindow.ui: day navigator widget changes - changed from Horizontal to Vertical 2010-01-22 korrco * src/gui/alarmdialog.cpp, src/gui/mainwindow.cpp: room.h and .cpp removed * src/mvc/mvc.pro: room.h and .cpp removed * src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/mvc.pro, src/mvc/track.cpp, src/mvc/track.h, src/sql/sqlengine.cpp: caching removed * src/gui/mainwindow.cpp: caching removed 2010-01-22 pavelpa * src/gui/mainwindow.cpp: sanity check for consitency of confId in AppSettings and the DB * src/app/appsettings.cpp, src/app/appsettings.h: forgotten appsettings files * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/treeview.cpp, src/mvc/treeview.h: implemented NOW tab 2010-01-21 pavelpa * src/gui/importscheduledialog.cpp, src/gui/importscheduledialog.ui, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h: modifications to import-schedule dialog - closed automatically after parsing/importing schedule * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/mvc.pro, src/mvc/treeview.cpp, src/mvc/treeview.h: EventModel signaling changed - if some of the data (favourite,alarm) has changed on the event, signal 'eventHasChanged' is emitted - all treeViews (eg. DayView, FavsView, TracksView, ...) have to listen on this signal Only favouritiesView is 'reset' when current tab is changed in mainWindow - 'cause time groupings have to be recreated, since favs may have changed * src/gui/mainwindow.ui, src/sql/schedulexmlparser.cpp, src/sql/sql.pro, src/sql/sqlengine.cpp: check for existence of conference before inserting it into DB * src/app/app.pro, src/gui/alarmdialog.cpp, src/gui/eventdialog.cpp, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/sql/schedulexmlparser.cpp: added 'Conference' tab - to list conference details - implemented AppSettings for storing Application settings - stored conference ID * src/app/app.pro, src/app/main.cpp, src/schedule.qrc: removed schedule resource file, which was used for testing - import schedule dialog replaces it's functionality 2010-01-21 fortefr * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/treeview.cpp, src/mvc/treeview.h: Warning handling 2010-01-21 pavelpa * src/gui/importscheduledialog.cpp, src/gui/importscheduledialog.h, src/gui/importscheduledialog.ui: forgotten Import Schedule Dialog files 2010-01-21 uzakmat * data/26x26/fosdem.png, data/40x40/fosdem.png, data/48x48/fosdem.png, data/64x64/fosdem.png, data/Makefile, data/maemo/fosdem.desktop, debian/changelog, debian/control, debian/files, debian/rules, src/app/app.pro: New installation path for the binary, Maemo optification added into debian/rules, new icons 2010-01-21 pavelpa * src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/orm/ormrecord.h, src/sql/sqlengine.cpp: import/search schedule dialog implemented 2010-01-21 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/orm/ormrecord.h, src/sql/sqlengine.cpp: update for the search 2010-01-21 fortefr * src/mvc/delegate.cpp: Time conflict fix * src/mvc/delegate.cpp, src/mvc/delegate.h: Time conflict warning 2010-01-21 korrco * src/gui/alarmdialog.cpp, src/gui/mainwindow.cpp: exception handling changed 2010-01-21 pavelpa * src/mvc/event.cpp, src/mvc/event.h, src/orm/ormrecord.h, src/sql/sqlengine.cpp: combined EVENT and VIRTUAL_EVENT => 'EVENT' now - Maemo sqlite doesn't support Full-Text-Search 2010-01-21 korrco * src/gui/mainwindow.cpp: updateTab refactored * src/mvc/eventmodel.cpp: activities tab implemented * src/mvc/track.cpp, src/mvc/track.h: activities tab implemented * src/gui/mainwindow.cpp, src/mvc/eventmodel.cpp, src/orm/ormrecord.h, src/sql/schedulexmlparser.cpp, src/sql/sql.pro, src/sql/sqlengine.cpp: activities tab implemented 2010-01-21 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/orm/ormrecord.h, src/sql/sqlengine.cpp, src/sql/sqlengine.h: first working version of the search 2010-01-21 pavelpa * src/gui/eventdialog.cpp, src/gui/eventdialog.ui: event dialog - details about the Event is displayed in FullScreen mode * src/gui/mapwindow.cpp: compilation error "linux" fix - caused by previous commit * src/gui/mapwindow.cpp, src/gui/mapwindow.ui: map is displayed in FullScreen mode 2010-01-20 pavelpa * src/mvc/treeview.cpp, src/mvc/treeview.h: group items (time/track/...) are expanded on single-click * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/activity.cpp, src/mvc/activity.h, src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/mvc.pro, src/mvc/track.cpp, src/mvc/track.h, src/sql/sqlengine.cpp, src/test/mvc/eventtest.cpp: changed 'Activity' -> 'Track' * src/sql/sqlengine.cpp: parsing activity from xml - 'track' from xml schedule is treated as an activity * src/gui/eventdialog.cpp, src/gui/eventdialog.ui: event dialog changes - changed font/background colors - title occupies more lines if it doesn't fit in one line * src/gui/alarmdialog.cpp, src/gui/alarmdialog.ui: alarm dialog changes - displayed additional Event's details - autoresizing title (if it doesn't fit in one line) * src/gui/alarmdialog.ui, src/gui/mainwindow.cpp: updated alarm dialog 2010-01-20 uzakmat * data/Makefile: Makefile reverted as it was overwritten accidentally 2010-01-20 pavelpa * src/gui/alarmdialog.cpp, src/gui/mainwindow.cpp: implemented some error handling * src/mvc/delegate.cpp, src/mvc/treeview.cpp: alarm icon/stuff is relevant for MAEMO only - used "MAEMO" define for conditional compilation * src/alarm/alarm.cpp, src/app/main.cpp, src/gui/alarmdialog.cpp, src/gui/alarmdialog.ui, src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/mainwindow.cpp, src/gui/mainwindow.h: MAEMO: work on alarm - snooze alarm - cancel alarm - run application which automatically display Event dialog for given Event ID 2010-01-20 fortefr * src/icons.qrc, src/icons/exclamation-iconOff.png, src/icons/exclamation-iconOn.png, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.h: Warning icon (uncompleted) 2010-01-20 timkoma * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/sql/sqlengine.cpp, src/sql/sqlengine.h: temp commit for search tab 2010-01-20 pavelpa * src/app/app.pro, src/mvc/delegate.cpp: display event details in the treeView 2010-01-20 korrco * src/gui/mainwindow.cpp, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: activities viewed ordered by activity id and start time 2010-01-20 fortefr * data/Makefile, src/app/app.pro, src/icons.qrc, src/mvc/delegate.cpp: Big icons fix 2 * src/icons/alarm-off.png, src/icons/alarm-offBig.png, src/icons/alarm-on.png, src/icons/alarm-onBig.png, src/icons/compass.png, src/icons/compassBig.png, src/icons/favourite-off.png, src/icons/favourite-offBig.png, src/icons/favourite-on.png, src/icons/favourite-onBig.png: Big icons D icons/favourite-off.png D icons/favourite-on.png AM icons/favourite-offBig.png AM icons/favourite-onBig.png D icons/alarm-off.png D icons/compass.png D icons/alarm-on.png AM icons/alarm-offBig.png AM icons/compassBig.png AM icons/alarm-onBig.png 2010-01-20 korrco * src/mvc/activity.cpp, src/mvc/activity.h: static allocation instead of dynamic added when creating activity map 2010-01-20 pavelpa * src/mvc/delegate.cpp: some drawing modifications * src/schedule.en.xml: the most recent FOSDEM 2010 schedule http://fosdem.org/schedule/xml 2010-01-19 pavelpa * src/mvc/mvc.pro: pali, nerob bordel * src/gui/eventdialog.cpp, src/gui/eventdialog.ui, src/src.pro: changed abstract/description/scrollbars color in eventdialog 2010-01-19 korrco * src/gui/mainwindow.cpp, src/mvc/activity.cpp, src/mvc/activity.h, src/mvc/eventmodel.cpp, src/mvc/mvc.pro: support for view activities with their names added 2010-01-19 pavelpa * src/gui/eventdialog.cpp, src/gui/eventdialog.ui, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/event.h: event-dialog - displayed persons/presenters names - implemented Event::persons() method to get persons names associated with the given event ID * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/treeview.cpp, src/mvc/treeview.h: single-click is used to open event dialog * src/gui/mapwindow.cpp, src/gui/mapwindow.h: diplayed map is closed by single-click, instead of double-click * src/alarm/alarm.h, src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/sql/sqlengine.cpp, src/src.pro: work on alarm * src/alarm/alarm.cpp, src/app/app.pro, src/app/main.cpp, src/gui/gui.pro, src/mvc/mvc.pro, src/mvc/treeview.cpp, src/schedule.en.xml: work on alarm 2010-01-19 korrco * src/gui: minimal size for tabs set 2010-01-19 uzakmat * data, data/26x26, data/26x26/fosdem.png, data/40x40, data/40x40/fosdem.png, data/48x48, data/48x48/fosdem.png, data/64x64, data/64x64/fosdem.png, data/Makefile, data/maemo, data/maemo/fosdem.desktop, debian, debian/changelog, debian/compat, debian/control, debian/copyright, debian/dirs, debian/docs, debian/files, debian/rules, fosdem-maemo.pro, src/app/app.pro, src/fosdem.pro, src/src.pro: Addition of files required for a Debian package and Maemo specific files 2010-01-19 fortefr * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: Favourites dayNavigator 2010-01-19 pavelpa * src/app/app.pro, src/app/main.cpp, src/gui/mainwindow.cpp, src/schedule.qrc: schedule.en.xml is now in resource - for testing only - will be removed from final application 2010-01-19 korrco * src/gui/mainwindow.ui: minimal size for tabs set 2010-01-19 fortefr * src/gui/mainwindow.cpp, src/gui/mainwindow.h: Update tabs 2 -This line, and those below, will be ignored-- M src/gui/mainwindow.cpp M src/gui/mainwindow.h * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: Automatic tabs update M src/gui/mainwindow.ui M src/gui/mainwindow.cpp M src/gui/mainwindow.h 2010-01-19 pavelpa * src/gui/mainwindow.cpp, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/mvc/event.cpp: set MapDialog title * src/gui/mainwindow.cpp, src/maps.qrc, src/maps/rooms/not-available.png: handled the case when the map is not available * src/gui/mainwindow.cpp, src/mvc/event.cpp, src/mvc/event.h: map-name to map-path implemented - correct map is displayed * src/mvc/delegate.cpp: fixed: icons overlapped 2010-01-18 pavelpa * src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mapwindow.cpp, src/gui/mapwindow.h, src/gui/mapwindow.ui, src/mvc/eventmodel.cpp, src/mvc/treeview.cpp, src/mvc/treeview.h: started work on displaying map - implemented mapwindow - map is hard-coded for now TODO: finish getting map path from the event * src/app/app.pro, src/maps, src/maps.qrc, src/maps/campus.png, src/maps/rooms, src/maps/rooms/H-WC.png, src/maps/rooms/aw1105.png, src/maps/rooms/aw1115.png, src/maps/rooms/aw1117.png, src/maps/rooms/aw1120.png, src/maps/rooms/aw1121.png, src/maps/rooms/aw1124.png, src/maps/rooms/aw1125.png, src/maps/rooms/aw1126.png, src/maps/rooms/chavanne.png, src/maps/rooms/ferrer.png, src/maps/rooms/guillissen.png, src/maps/rooms/h1301.png, src/maps/rooms/h1302.png, src/maps/rooms/h1308.png, src/maps/rooms/h1309.png, src/maps/rooms/h2111.png, src/maps/rooms/h2213.png, src/maps/rooms/h2214.png, src/maps/rooms/infodesk.png, src/maps/rooms/janson.png, src/maps/rooms/lameere.png, src/maps/rooms/thumbs, src/maps/rooms/thumbs/H-WC.png, src/maps/rooms/thumbs/aw1105.png, src/maps/rooms/thumbs/aw1115.png, src/maps/rooms/thumbs/aw1117.png, src/maps/rooms/thumbs/aw1120.png, src/maps/rooms/thumbs/aw1121.png, src/maps/rooms/thumbs/aw1124.png, src/maps/rooms/thumbs/aw1125.png, src/maps/rooms/thumbs/aw1126.png, src/maps/rooms/thumbs/chavanne.png, src/maps/rooms/thumbs/ferrer.png, src/maps/rooms/thumbs/guillissen.png, src/maps/rooms/thumbs/h1301.png, src/maps/rooms/thumbs/h1302.png, src/maps/rooms/thumbs/h1308.png, src/maps/rooms/thumbs/h1309.png, src/maps/rooms/thumbs/h2111.png, src/maps/rooms/thumbs/h2213.png, src/maps/rooms/thumbs/h2214.png, src/maps/rooms/thumbs/infodesk.png, src/maps/rooms/thumbs/janson.png, src/maps/rooms/thumbs/lameere.png, src/maps/rooms/ua2114.png: added maps * src/mvc/event.h: pali, nerob bordel * src/gui/eventdialog.cpp, src/gui/eventdialog.h, src/gui/eventdialog.ui, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: implemented 'Event' dialog to display relevant 'Event's info 2010-01-18 korrco * src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp: sorting by activity id added 2010-01-18 pavelpa * src/gui/mainwindow.ui: autoresizing activities treeView * src/mvc/delegate.cpp, src/mvc/delegate.h: implemented drawing icons + number of favs/alarms in the corresponding group 2010-01-18 korrco * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/eventmodel.cpp: grouping by time equation changed - beter group deviding, also according to favourites * src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/eventmodel.cpp, src/orm/ormrecord.h: activities tab implemented - need to fit gui, functionality works fine * src/mvc/eventmodel.cpp: activities tab implemented - not finished yet * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/daynavigatorwidget.ui, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: activities tab implemented - not finished yet 2010-01-18 pavelpa * src/alarm/alarm.cpp, src/alarm/alarm.h, src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/treeview.cpp, src/sql/sqlengine.cpp: added 'alarm' columnt to the 'EVENT' table to signalize that the event has/hasn't alarm set 2010-01-18 fortefr * src/gui/mainwindow.cpp, src/gui/mainwindow.h: Favourites fix 2010-01-18 pavelpa * src/gui/gui.pro: maemo specific compilation fix 2010-01-18 fortefr * src/fosdem.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/treeview.h: Fav table update M trunk/src/gui/mainwindow.h M trunk/src/gui/mainwindow.cpp M trunk/src/mvc/treeview.h M trunk/src/mvc/eventmodel.cpp M trunk/src/mvc/event.h M trunk/src/fosdem.pro 2010-01-18 pavelpa * src/icons/alarm-off.png, src/icons/favourite-off.png, src/mvc/delegate.cpp, src/mvc/delegate.h: added GrayScale versions (inactive/OFF) of the icons 2010-01-18 hanzes * src/sql/sqlengine.cpp: fixed sqlite statement 2010-01-18 pavelpa * src/gui/gui.pro: fixed: broken compilation for linux caused by previous commit * src/alarm, src/alarm/alarm.cpp, src/alarm/alarm.h, src/alarm/alarm.pro, src/fosdem.pro, src/gui/alarmdialog.cpp, src/gui/alarmdialog.h, src/gui/alarmdialog.ui, src/gui/gui.pro: started work on alarm(libaalarm) * src/gui/mainwindow.ui, src/sql/sql.pro, src/sql/sqlengine.cpp: used 'MAEMO' define to create 'non-virtual' 'VIRUAL_EVENT' table instead of 'virtual' one, only for 'MAEMO' Linux stays untouched - creates real 'virtual' table for FTS support 2010-01-18 korrco * src/gui/mainwindow.cpp: current path print added 2010-01-18 fortefr * src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/orm/ormrecord.h, src/sql/sqlengine.cpp: Temporal virtual_event change 2010-01-18 korrco * src, src/gui, src/sql: syncing project 2010-01-18 pavelpa * src/mvc/eventmodel.cpp: fix: segfault - fixes segfault when switching days in "Day View" - TODO: needs to be verified, 'cause it looks like it shouldn't work, but it does - when calling 'QAbstractItemModel::removeRows()' it returns false, but it prevents application from crash(segfault) - possible explanation is that the timing has changed and so the conditions for the segfault * src/gui/mainwindow.ui: added "Quit" to "File" menu 2010-01-17 pavelpa * src/mvc/eventmodel.cpp, src/mvc/eventmodel.h, src/mvc/treeview.cpp: implemented method to force 'EventModel' emit a signal dataChanged() - so 'TreeView' know it has to redraw items corresponding to chanded indices (range of indeces) * src/global.pri: created 'global.pri' file, which should cover all global definition of the project - this file has to be include in each "*.pro" file, where it's needed - defines "MAEMO" for handling 'MAEMO' specific code in source files - defines "maemo" for handling 'MAEMO' specific files in "*.pro" file(s) * src/mvc/event.cpp: just minor corrections to 'event' * src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/mvc/event.cpp, src/mvc/event.h, src/mvc/eventmodel.cpp, src/mvc/eventmodel.h: started work on 'favourities' - created tavourities tree view in the MainWindow 'Favourities' tab - listed some testing 'fav' events - TODO: list isn't updated dynamically, which means that the list isn't updated if the user adds/removes an event(s) to/from the 'favourities' list * src/mvc/delegate.cpp, src/mvc/event.cpp, src/mvc/event.h, src/orm/ormrecord.h: implemented JOINing two tables - modified 'ormrecord' to support JOINing two tables - modified 'event' accordingly, since its items/columns are splitted into two separate tables 2010-01-16 pavelpa * src/fosdem.pro, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/event.cpp, src/mvc/event.h, src/mvc/treeview.cpp, src/orm/ormrecord.h, src/sql/sqlengine.cpp: work on favourite - created 'favourite' column in EVENT table - modified 'ormrecord' for setting record's elements - favourities view not implemented 2010-01-15 korrco * src/sql: syncing sql directory 2010-01-14 fortefr * src/icons/compass.png: Compass icon * src/gui/mainwindow.ui, src/icons.qrc, src/mvc/delegate.cpp, src/mvc/delegate.h, src/mvc/treeview.cpp: Map button/compass icon added * src/gui/about.ui, src/gui/mainwindow.ui, src/orm/ormrecord.h: Testing svn, tabs added, misprint fixed 2010-01-14 pavelpa * src/app/app.pro, src/fosdem.pro, src/gui/daynavigatorwidget.cpp, src/gui/gui.pro, src/gui/mainwindow.ui, src/model, src/mvc, src/mvc/model.pro, src/mvc/mvc.pro, src/test/main.cpp, src/test/model, src/test/mvc, src/test/test.pro: just some directory renaming - renamed 'model' to 'mvc' (Model-View-Controller), since it contains also 'delegate' and 'view' 2010-01-13 pavelpa * src/model/conference.h, src/sql/sqlengine.cpp: minor fix * src/gui/daynavigatorwidget.cpp, src/gui/daynavigatorwidget.h, src/gui/daynavigatorwidget.ui, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/model/conference.h, src/model/eventmodel.cpp, src/model/eventmodel.h: implemented day navigator widget - to switch between conference days * src/gui/mainwindow.cpp, src/model/conference.cpp, src/model/conference.h, src/model/eventmodel.cpp, src/model/eventmodel.h, src/model/model.pro, src/sql/sqlengine.cpp: implemented 'conference' record for accessing info about the conference - events are loaded from the first day of the conference * src/gui/about.ui, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: added about dialog(s) - some modifications needed - About Qt: not scrollable - About app: modifications to display items in system font/colors needed * src/app/main.cpp, src/icons.qrc, src/icons/fosdem.png: added application icon 2010-01-12 pavelpa * src/app/app.pro, src/fosdem.pro, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui, src/model/eventmodel.cpp, src/model/eventmodel.h, src/schedule.en.xml, src/sql, src/sql/schedulexmlparser.cpp, src/sql/schedulexmlparser.h, src/sql/sql.pro, src/sql/sqlengine.cpp, src/sql/sqlengine.h: implemented xml parser - parsing Schedule * src/app/app.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.ui, src/icons, src/icons.qrc, src/icons/alarm-off.png, src/icons/alarm-on.png, src/icons/collapse.png, src/icons/expand.png, src/icons/favourite-off.png, src/icons/favourite-on.png, src/model/delegate.cpp, src/model/delegate.h, src/model/model.pro, src/model/treeview.cpp, src/model/treeview.h: modified model-view - created own delegate to display TreeView items - contains also 'controls' - which are clickable (handled in TreeView) - created own TreeView inherited from QTreeView - to handle control-clicks of the Delegate - minor modifications to MainWindow UI - QTreeView replaced by own TreeView - autoresizing of TreeView - icons added 2010-01-07 korrco * src: support for creating GUI via QtCreator added * src/test: support for creating GUI via QtCreator added * src/orm: support for creating GUI via QtCreator added * src/model: support for creating GUI via QtCreator added * src/app: support for creating GUI via QtCreator added * src/gui: support for creating GUI via QtCreator added * src/orm/ormrecord.h: TODO for exception handling added * src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/gui/mainwindow.ui: support for creating GUI via QtCreator added 2010-01-02 komarma * src/app/app.pro, src/gui/gui.pro, src/gui/mainwindow.cpp, src/model/event.cpp, src/model/event.h, src/model/eventmodel.cpp, src/model/eventmodel.h, src/model/model.pro, src/orm/ormrecord.h, src/test/model/eventtest.cpp, src/test/model/eventtest.h: Creating EventModel class 2009-12-31 komarma * src/model/event.h, src/orm/ormrecord.h, src/test/model/eventtest.cpp: Fixing datetime conversion 2009-12-30 komarma * src/model/event.cpp, src/model/event.h, src/orm/ormrecord.h, src/orm/sqlcondition.cpp, src/orm/sqlcondition.h, src/test/model/eventtest.cpp, src/test/model/eventtest.h: Adding database loading and data conversion to orm module 2009-12-29 komarma * src/fosdem.pro, src/model/event.cpp, src/model/event.h, src/model/model.pro, src/orm, src/orm/orm.pro, src/orm/ormrecord.h, src/orm/sqlcondition.cpp, src/orm/sqlcondition.h, src/test/model/eventtest.cpp, src/test/model/eventtest.h, src/test/test.pro: Adding orm module 2009-12-28 komarma * src, src/app, src/app/app.pro, src/app/main.cpp, src/fosdem.pro, src/gui, src/gui/gui.pro, src/gui/mainwindow.cpp, src/gui/mainwindow.h, src/model, src/model/event.cpp, src/model/event.h, src/model/model.pro, src/test, src/test/gui, src/test/main.cpp, src/test/model, src/test/model/eventtest.cpp, src/test/model/eventtest.h, src/test/test.pro: Creating initial application directory structure. * ., docs: Creating initial repository structure confclerk-0.6.0/data/0000775000175000017500000000000012156157674013706 5ustar gregoagregoaconfclerk-0.6.0/data/confclerk.10000664000175000017500000001562612156157674015750 0ustar gregoagregoa.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" ======================================================================== .\" .IX Title "CONFCLERK 1" .TH CONFCLERK 1 "2013-04-19" "Version 0.6.0" "Offlince conference scheduler" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ConfClerk \- offline conference schedule application .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBconfclerk\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBConfClerk\fR is an application written in Qt, which makes conference schedules available offline. It displays the conference schedule from various views, supports searches on various items (speaker, speech topic, location, etc.) and enables you to select favorite events and create your own schedule. .PP At the moment \fBConfClerk\fR is able to import schedules in \s-1XML\s0 format created by the PentaBarf conference management system (or frab) used by e.g. \s-1FOSDEM\s0, DebConf, FrOSCon, Grazer Linuxtage, and the \s-1CCC\s0. .PP ConfClerk is targeted at mobile devices like the Nokia N810 and N900 but works on any sytem running Qt. .SH "OPTIONS" .IX Header "OPTIONS" None. .SH "CONFIGURATION" .IX Header "CONFIGURATION" The configuration can be done via the graphical interface. .PP The configuration is saved in the default QSettings location, i.e.: .IP "Linux" 4 .IX Item "Linux" \&\fI~/.config/Toastfreeware/ConfClerk.conf\fR .IP "Windows" 4 .IX Item "Windows" In the registry (search for the Toastfreeware key, should be at \&\fIHKEY_CURRENT_USER\eSoftware\eToastfreeware\eConfClerk\fR). .IP "Other \s-1OS\s0" 4 .IX Item "Other OS" Cf. the QSettings documentation at http://doc.qt.nokia.com/stable/qsettings.html#locations\-where\-application\-settings\-are\-stored . .SH "FILES" .IX Header "FILES" \&\fBConfClerk\fR keeps its database in the location proposed by the \s-1XDG\s0 Base Directory specification http://standards.freedesktop.org/basedir\-spec/basedir\-spec\-latest.html : .PP So the configuration (see \*(L"\s-1CONFIGURATION\s0\*(R") is stored at \&\fI~/.config/Toastfreeware/ConfClerk.conf\fR and the database is kept at \&\fI~/.local/share/data/Toastfreeware/ConfClerk/ConfClerk.sqlite\fR. .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" .SS "Main code" .IX Subsection "Main code" .Vb 4 \& Copyright (C) 2010 Ixonos Plc. \& Copyright (C) 2011\-2013, Philipp Spitzer \& Copyright (C) 2011\-2013, gregor herrmann \& Copyright (C) 2011\-2013, Stefan Strahl \& \& This program is free software; you can redistribute it and/or modify \& it under the terms of the GNU General Public License as published by \& the Free Software Foundation; either version 2 of the License, or \& (at your option) any later version. \& \& This program is distributed in the hope that it will be useful, \& but WITHOUT ANY WARRANTY; without even the implied warranty of \& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \& GNU General Public License for more details. \& \& You should have received a copy of the GNU General Public License along \& with this program; if not, write to the Free Software Foundation, Inc., \& 51 Franklin Street, Fifth Floor, Boston, MA 02110\-1301 USA. .Ve .SS "Additional resources" .IX Subsection "Additional resources" .IP "data/confclerk.*:" 4 .IX Item "data/confclerk.*:" .Vb 1 \& Copyright (C) 2011, Christian Kling \& \& This program is free software; you can redistribute it and/or modify \& it under the terms of the GNU General Public License as published by \& the Free Software Foundation; either version 2 of the License, or \& (at your option) any later version. .Ve .IP "icons/*" 4 .IX Item "icons/*" All icons are taken from the Debian package gnome-icon-theme, which contains the following notice (as of 2011\-06\-24): .Sp .Vb 12 \& Copyright © 2002\-2008: \& Ulisse Perusin \& Riccardo Buzzotta \& Josef Vybíral \& Hylke Bons \& Ricardo González \& Lapo Calamandrei \& Rodney Dawes \& Luca Ferretti \& Tuomas Kuosmanen \& Andreas Nilsson \& Jakub Steiner \& \& GNOME icon theme is distributed under the terms of either \& GNU LGPL v.3 or Creative Commons BY\-SA 3.0 license. .Ve .IP "src/icons/favourite*, src/icons/alarm*, src/icons/collapse*, src/icons/expand*:" 4 .IX Item "src/icons/favourite*, src/icons/alarm*, src/icons/collapse*, src/icons/expand*:" .Vb 2 \& Copyright (C) 2012, Philipp Spitzer \& Copyright (C) 2012, Stefan Strahl \& \& This program is free software; you can redistribute it and/or modify \& it under the terms of the GNU General Public License as published by \& the Free Software Foundation; either version 2 of the License, or \& (at your option) any later version. .Ve confclerk-0.6.0/data/confclerk.png0000664000175000017500000014613012156157674016367 0ustar gregoagregoaPNG  IHDRHHgAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>IDATxwtƟ;uVZqlc)t $$NITZ!!@(n0S{/˪efhZmM;̝wF;Ͼ                                                                                                                                                                                                                                                                                                                TbAAQX<pFCAQjc;EY˪3fzAAAB0c̯Xlb{%XR/;#  抒V+Ehy,Ð$ <90(+UV+VU1E]0=?$4(laP$h[YHӠtv5 4t] o(|1bb7&Rؐ9PU1je#% C5 R] sK0\(japՆպ:ta.+v4[y³?{Ej1.LnxԋH y} jkYQЇ c:t 662|&V` ϕe AZ?9; 7sҚvQ#bE(+V8xH$zÁ2ɘ)B!^i"aȟ@eYA~Nuׅ{%OMwD4BhDEYaݡi qVQ(QԇBih] %"!C~K0x:eϽxіy`UkCÐ!CV?9o﹭?WTca>൒P[B3ۿ@nf,)(Y=V8H:9 $b@v騣Ĕ35"<"bI7`. +2WI'~봶փ8@T `!C@yS`St096Mw`PK@CcPbl6bgb5zI}oǏuz<<:n/k\(5:fsp` ??,rct-pCEņ(: djOg5(ɈC7HD>PT5v+T^ûv` q0|&駧z<\󵪲 #Ӏ]xv!"N;-5zAOѣ3ێ.:{md~rtt@.ܪ,sssv;wIxG tDq16QR,IiDO #@jmuޔiUYf{wV5ӵZ-64Q:8('lnΟAa&}^y7x\+{|;dÙZO>̡oFޮuƌXs~ⴶp:Qߛ9|yuN4iҔwW1mm hoߙk?(흴nR:/\xG[o}5qTU"|8x!%ё~GGs2>w^I}}90Lc=BZ04cXEٙKk@"hGA"jzcCsEMv_561TX2~;̲z~UW\ʪ> fW*٧NU/ۤ#eNommUCGܿjrs0S iG@(̥K165@tO+[[9\| 5nڹ8rbnr pݛL[Ӿ ˪ i TZ$IJEvS.$$8g65 P/-@{Dlj[7M20(^i h Bdrlay֦8:s|Zz7ˆgK Ra[2gLJl.R~vtb` rm M-n72f]qy"s4Cҿ" JKPFk(GE}O$c)j4(`mA"ё9pـT<%ZirL/Z PCr^- 5-w7.kQH`f1bĻU̫5"ьlw{@)mia)Y\(8#@,巵5tD׌/eŲbrV0X/,C.k$cWVg R4ZVl9v=.6- UM"UQ,xyŖ1CqX :w80sg "ș1[$&JrY2X/x4!hS1nhkYa➲tG03X3Ӷ7&($B&W/MY8lnΎ(<'b˿6’Axj v0?c_˪zbUjԓRk@"Fd*]8\ȿIfsa !h$ y}8^_:H p8\>wo,n|-2o De#_`Ј "kS%m"%]XE݁7HKdi^Fb - @:noD#b`ifVg 2PlQg* |oFP,봳C`R>PFnقdZ%[`ȲRb"X$t~>0nχhl*  m^:ba`s{bM %L6,CP AUw={.,VtY?hw]Hky&`A@蚓I2KלAꖢ/+2LkY' Շ紶TnZ!IO+Z[y8\en`ba9wzU{;P eP_D:0TQVTMoD1' $"%z.wqgqso~s-~ώ';.`0PX{3' x)eEuy΍v$7yM(Yu5̈́mmBZnh-H0ⳋL֫VYӋnYKt GcOHbdF fOZ1$D&rhap@v1HVVk}Z23h,?|.X07p҉ߎ;o Sn /(vM^[ _xPZ)*.BRcMZA=-eb?tYwS +Ii- mmRgH2h+D_nd L7vln;ӊVO=Ǔ9@K%F(ʂǷq8p'&/-x= aTMᅨo]x,x@J+^톪}B!yn"/AɩE5tv-K񼗩莑!lT,Zf"5- $;"P+$$# MM#DrHh[Hs: 0g$ tQ(ib(ڀ!:_HeųZ-?Æ UW]|1"}p{{{ ?OҹiO{mmp&yw w@ TV% Uۻt 7_Me\ŊmaH6M OԨ6<;OVm80F=)f6 $"%< R[[8Ŗ2YZ[yAV`5]ưaϜd-3h iUB]]ݴp7BQRu!n\の`0S'-p)gSO* MӺ-"? hwwm;sz}>D-n۶ysW0D 8Xbn8 QuNa0U\{tzٸcѶ[DV}R^{QjeRj$9ZiyQ-GEEF" D B(hp:yshTbpAZ[ tC$XKDxL7w{#'F{ޮbʔqyGvAQ)+&aG+-#4Ex_{衍PΔqlv#gݷQy)? cjYJCP3X{ϻ{D^>TUe4ECj)T S&et5`LZh4 I~lk dv{\k"H bAIɧ)E E\l[:*aN͍ $SW3Y~3պ vO0" ++}fߓ .$D>8LKCan>5}@ommDfik+T`x8Tɫ`11SPA؆a@ +VV dwsJ .͆z$z2-Drj0[ $Qs@"R3~LU*hHwF^3S{.ts) $g#Y #>\\Ŗ)pםIx" n_ŲW,=ڥ QVT?P$$~?ugfvHuu LD "0]Aי>>'a=Xɘ%X,d. S$Ҝ7u0+ 8hôjK](m^wۡ:I 'UV f MWBͱWX"3n[F"dF .3 o2s9jj S7&Sͧ6-LMS9 rB!@8B%g6|jsmH:H޷ .]u ~VKzbۻᒬT2Ʈ+K-s|0)ݷ`. ߾邴 QmmmaZBAGja01Bմ2/ -<7/X'Y s3gs\.Q9`=&w]=c?)t6Ix;=̑c/H$M ̜ܟljS㦛**;vQ]H$7ސlY'Ezk2e*FO^y{2B O &ҋBe`K,\ Pl@@å&0OGMMe*/͵W_޹W sؓXZbUYGnK}qDru-{o"֬IWĘ1c ƻ~8^='\`7\r9dj9N3f'`*?NM{tvrx`_zh"^*Cg|D"=;S۴8¸i#vbdw \auux___+TUU'IVuF&~pM9vb+6`6iIx<A}E8l( GPdA"yW̐z ւD( o X~CQT%Mp"0~umV444HGGr0K~7G#޹ THnO>DiHC%ks[ncʊBV#J2P,XiAJ/rH[n''N8ᄔcn7^~%sιl6͂iDQD}z$){%fetx^lذmm6l(ƌsGŒ]V(2^\8x1vy?wtT׭[AGG/ZS. yQט'1^dL8@X{{B`mHD^7$f͚j|駟cGڶm[q-7cΜ9ؾ}<}\{/P]]; ^xQl)(̙'|+WD[Y 8SVts;]bC=>|Dr,\Hs,_o]pO? {paذ6l(^jjj0~x\p:x睷qw`AXf-DQğ\pYפûҬY~:$DQĩ#8O|(J8r0V%+ -}r:9w4Hj%VhMHL%~*s($g?N<$w᪫xGWO<$~$Vq-7O>EGG.5 rhڞbs\8cӟ gƈqG 1c}݋nM|[SS֯_>_<(><ø1a{}Hׯ+HòeK1k'qy7o9 xoaȐ!Xd *+yڊ 3^;~_#^z޼䒋0|pLrx5 m - Ca?1+Vի7<_W\6,]ӦMKZ ޫ{@ٟa֭ص Ce5'xb*޺cŊp8}*PLx ׋+VĄ |uk(J;c hmmɩZzCk c1QTg6 $" LYlޜ>Z1x`O &O)S_ >ģ>c9&ɥkzmd'~w;vlՄjlڴ)& 7\%sCE̜9W\m7&.YO=)@qSO=ѣǤuuם;v,.5k44)kFw57dZ! I =^ϛUHOΌ(~-H;- ]6Eo;W]uzPUSw_\;+bȐpB躎}M̊jmmE(Jz}_\$TUMJQ]]عs~mKt56J)T`Æ2$ &պrYr%ƌ=_ߋ>&.|xU4feHfLWf-mVXz~{aܸ cv{ڿ^ }ᆛp 7&۵knp8k|χ'| ǬY۷c㯋\CsӮr Oj0[^#Xѓ*G`AnAC OwƘ1c1~gywq}H$o67n<~__b S(ʕ+ pt&aƌ+D"<̇o;ZXVLrx`ŋ㪫Nض|2k w%Y"AH*L۷oC$u6{vܹs/駟Bmm-&LqNKz}_ӧ#Fࡇu@#."\uո[\aoWUUU8xד3xlݺp85USNW#FE]e"aܹǎ})ɓƯ~u-z_]PRK-HPj@ˮrHǁDQUUI|kˋ(*eyޜ\lk֬jVJ ֭[-[6|믿}!B +W&&m?p᠃/y 3m+Lѣ`҂C=,sìYV%x70lذ}i B喛pq{>iM}dpw_Ͽ & %YDZ' bY+WsXd9nvXr{ѤK,'EIwؑ}fA:S1{\l߾#GYg_|!;-SࡇĒ%Kc0nx̟?WiڴixWx8唓p>x#Fĭmmm_z֮]n{2sޅR?T3QTKV-$IV*cR_QvTjߝ\ ͘1#1qX4O8眳:N7^lw}o~:N?Nß8%Sʕ+peJAՓcM7ݜr߾`0KCkk+1jTnT>8)}РAp8S?̦VnWƿ(89s&~8^[d2 H$ݖrjE H6qĤӧ?3gOzꙜ\=ł4sLL:5elU*Zq1o}rrMhkkKGӔJ =xpS*TUŻテ/o vz<(>qe ̡C O/~뮻+p衇bi0 ?qS{3#vXҹO+ꚤt}}}R2D&66Ig0Cj0;pO6 $'UU[ ?/}>Of#]PjX*`Oz `0SKjz ӓҽ%IO\rt]СzeI.iʔ) nl36wdqŗ;~P" kTK/äIc۶eӦ~+V,ᅬO>4霿5XhQ@?~<>uT{/~3L?N? TWW##C?w<#X|f4=8=M[ R˅--v$`UASفEI =rd }Lh_CnO"(Jҷl6{4p))t&/Xː$I)[:HaT 0-Ds_`v{ʴc96mGUUUcrI󯩩G9~&S $UU1y<Ǎ/{#/[I;󼖴~S A_ƚ5矣 ~/23Ĉ#vZyd?oaΜJLh{kk,H ongx7ǒ@"YނdZaZM-901~~Am[R{v Ѩdap .⚦MlLZUU`0_~ 7p,kBl(I&JGbbٝ=$zbq8 X9fxxV>&u-x۲cZ1m4$|Lˍbbe9={իpig$mOWs-cc44\,6`+X`2X,`K=H;fMa-W#GJ*Y(bAjjB8묓cG4}LC 'L,Ʋ1nwGI0zt:X,;z2yLm6KcMyL$+="։P( ]3cZ3ZhbV|ikkG}}]czZ ƞgM{} &D$ IBM,\k a[CgCjS(H:H{1(!p<0#Gѣ1}R_Bδ'`Ӧ- q9sj~]DT$ߟ]fCDp45ٙnoo ˓\Og, u]{'a(83iZ|L(Jܼ]pvH;7\sq1K/9PN'a&≭c0a =$ɊEUz6a%X^D3TE[<00'!?a䯡ko"AhS"02k R)YETUM* I59~zUgO<8~>aعs+ #0 tv&qQuGMOfa1~*!(8p:c?~O!Fs5yW=y3Ԃcǒhϥ/$87*3}1X nHҙupy5 FHn}^p> I0Qc x$`l27I0?E3` IX1b}ϻ؝?$p/`mHDa8zbE/'b 4mJ2zQY힎ie L߁Z0vѰg $t]& @fu_ ۭe& t ]øx8{}e)r5`LSe͖$ѨAچ!B`fA(^So{ssBA \MKʊ"\S&LQHq0ή 06@=p ]݃Sn DQ0ø1dB84BB.1(@r\ذa}p|@"EQ`v7$Ѩ5s Rs@?Bht}DQZ-$ͅ_(kug>; C?CL?&0 kqdZ4pn0 $Af%|5Ex=6"t=s, EŤ--Wv\ H6d] V oo7FtG4MΔ)I+ Q|0~Ǝ⚳v[ ](RWi;뮔v `ltƱ}0vmjw v $]0!Ȝ*#`1(Hckp5@UP%BZAh/& lcI q(-00ݻp+ba 灱_@R>_>&;"8 K|=o!mVXH`,u0 \ `zFK-zӏrfe/(cɪeZB{=T_eGNnhr̭PObM:8@Qn[w o%`,m XzӂVQkapcQ̬<k D  ka0Quj cwAlI`l J?TVQ*JDiz-*kDw***LYc|Axg=8 Q$ uG(> ·(8`ڬ*z>9oJ99LB|)tؙ炱I (N0[/şic6@m/H41H!ferCtYlbWٛdbD*$IhnL7,HDw*ʌ)[$ A8 c*tMc@Nc 1 Q|>^ M?(cU)ZtlS I I)8_H 86 6-R@0'Z1#RH:`lR5H)-H@RFSbׂnTv#"~"{JȂDttf6c q0 #9M׫뱺/3!EQH 8a5i@ Z{0y;Di0vlPQX, O ]G4{ڞepʽ ;҇pZqG L)LdaH]l v:al(+)VkNY1գtV n65$fAc 叁b|\㥆t9 .Oi@*wu斖fD_M#BUMMuD0 p;`6np;AaaDQ1QUQ$IlD5r:`9f ظqCcܱZT @Ǝa 8p.t=93j}Lu6$ JE#?kMcʴ#[nstAB!BoooKqy. ߏ}IB|>(, V+, ,LmV%/q{cݎQ3P ? èp-$|9 r%Tjrf> ֯#vAI q$IL_Ef]ujyׯ_3<f}qEpb).B)@Gy쭷CTh@&!IiiUƞ_̚H#حд"0̪AHLDz׏ma?) ? /z# }6 $"(2gUUU>7K #FK TUS~կȑpUWيiZcc^%"(2n7.Zbi@S74@ջ~l.Y Gq<k 0kgd,3욈(ɈFB`obI `Gz @`rb3ӡ炱F0vpQ|wPV\I pfhJ#v"f(J */'y@*}=xW0dHva`ƌ1Ga`ed,|2S̝7$ (ɢ#XsQU^ eT$Aa 44"DQYg Y.L_LhC0wiX*+ںu}v,\Vd!=-xmEkii:::J$ɈDJW/~/ZZҎŋWv+a8I8I b…Yxt鲢e#IRTG6 $"iL1Hi` l$3 Η8p18+GjJ eic:.^M~k0fX?:6-X\h^MM;c{eEMevs:F$|ނ]sn0cc?g'Īj]kY0x C4`Ĉ!8qG~v3{xwٵG`mHD]\l͂D( 2X'3`vn cX#!)дU%S RZBO( M͹vw޹X|e\3:{cE%a(vԶGfROo؂Ng%FѣaĈ!8sp޹  a֧wûᅬ[5@=I q"5SbX1H=]l ~kըgr`Ԩ3z8Q?n&[o k׭ëW^{ K.+"O`mHDJݮe0-HtQ<p ɤ50Hա=W+ީn .@Ae<]pn>H2U%^ȳuR&`ѢXh%,GQq ú /g[Jz=X|ޝDt8k>߂08oJ0ރ x< ] dG f(> ANƱpR:QTѫؙBS}+P+V˯|??|ьc[n²%_řg^ OxR~EQpTfsxiAJ/"v"H*_4Xa ?R,PqjhZ5-#zeÃ?b+uH.^˯ϼ{ .A8g֮_G0aBo8aywtf0Pc4c\,OؽFp~5$s1B0q DQtC]q6O5P*pY}oe= (|S[c ݍO?YweA[CFx( jsFS tfT1)M(^\)EyL7 7\s"jJ $Hi]l ҮwԂP(<؅7x^~U<_z{=0辿|ޝD]\M&AN:q[8N` #Dp~ c`~7)tAC`l:!s %R-HMw>Hьߙ9|ø1{q3}9P$ ]#8=@B$gUUUƧ?LS-D1¥)a)iZE q06~t}87 ME{9֤R2V-𺡡!v#&a%#/W>M0x1g8s군'G#<u--jej3yAڅ *sI8=N-Hʸ?[rxHc=( X} R/9g8pUUztx<eVx,]C_',Y+!Id0 psR@BL$9|>߀ 17!7B>$- -EE$R~ϙ\-5ur0q('NŤR )2Q>NT9-H` 7k]l@ $-KhZ54 IK cHiG<{Rn\b{W,Ƌ/KV'r\|ѩ0a,dy`Xb]G{ _~ ƒf~>:R/o@"n! 땕gP|Y$bze{0DF%'/@4씋mCCv؁^ŋWØ1`1b?Vm밫ԗ@ ?^Zc9S;}.~]aU^bҗ8L@"Wdr|fpnɰw DDiQ.;vly|CC#3՟s]ZkW .\ ر#qp!^+#^tvz[/駝SNw“c@{ =@"hԞŶyfK/`>(ϯK l6[tkȲP|n c ۟ uwSRÑ51@QbGPq93R<{B)5. K,yAjerVMӱa7ذ8v3cƎ3q%KW)B=ٵ{]9{~s7ބ^~+-# Gt-vG\i D"%Iu466 .`$uPvvv2h#oǎ .|D|>֚u˱qKƪ9jb)|jvXFzRn$$IB4 (}ncغe;X3;MM`1֯ߜb)Yb6mچ㏟#g܋﹯,cM8]~e% mVjj0 bРi2Hh4o_Z9 ?/rNx CLi`(LرvK/ἡM/J/9VE|>z97Ts[LR F:;X`}Gù眈,\Vo[ˍ@ w_}'N?f|Kq?¼KP8L@"ngXmFܲØQ<^&L'toos/$z|uNgu|lLnNpŔäIӊ|Xrk?AlR444[]]}w]hkk<>e .tvH4aXf9 8~<>,\˖Kv!OGy.wvͽqF D@Q@, qK 1}4?  Ƣ`/d Rb⯿pq/xcPIҡibxc^/f1nwwE"c| 1zltvvbΝunVb/Cp%'M=EQ`**z ̔d3PEx<dkڍtd 96m܂M'3/X/\^0 |2Y voqE{߿˖(E12AJGjA _:t\ BO(~M+b6c ,hY Z RY]֯_Z}1EqF}6CK;&LJHmdSbcKKsN@筐mT _.˿}%f~Ih8\8L@ڋ`5 +VǬY 0f)1Hn L$}M;@tb c_p^^y9g]8OA͇ ;`q- Tbծ:c1~)+PAM&hA*ԗ~l}I cXv#&O>'L;O?oɽEJXzܝ}tKn}*8L׻()7co<{vQYMh 2PHft}$4G9伉|9id+pZ^, pYKE>楫 h0^5G@ca-SGkk؊E$޻SpGBsg ԫغ ^=%0 Ps2G =WpFG<쫯#1?УHlϟОc ːI2fC'ni5`vM)36pe:uH6AF`T)iA*mo]lXM;455Ǘ_,ŕ9JLaz*U܂8#е%('u~9gp#`f̟7lIyL$jAAًDAbH0/ y!p9V5tt OI805[bnBfEQކt I MT1m 4͙HJS)K?6tMg 嫱-8昩բ5󲪝d>p.ܸ0tP\x%,2Ais~*[ ;Z`b[nG863 $ΛA0[ IW"0v*8/,kQ S`Zj>oL R\Ð!.TA;oP,HV_H1HxOp0y:o @[-Z]q҉G7_瞏!($8,F[5as C9 ^l@*ڌ $-;j |Wrm8q8{Z\6060!aeQ I M+zx!B8Xd%6oކc;xOfͦR/-%KV# ӏM$[=Bi9?]NMaŽ.` H[4, 1p]Oo" Jov$i.8M3>]/t=fo\3 w,#8p%gQ(łTWW^ckW?Bv{[#Ygy_c2] /8x՗qig׭MMD(RߴB@i9 /N5k6a7 3Kb)0-H\laVNO9ue~m c) M31 Y)Havs]_JaW.躎9b&ya<ą7$rټe^x=\t)xqg"<5($299WNܲe'yM>#p8[jB(5fʿ30.(Y;aLn9Vh3QwH e7V,'z+'6l،ߛW-.֙,ӝ;[k31SOƛ炡k|h$  4 ;9/pakk{}@6Pk ebؔeX f))D ԘTI e,p5܊7Ѩ˿uʫ)-;{ᔓO}ܝu@gWVp-np{Kk䓅ؼ9ZDQXb׮& 2**X,XPEUUήcc+o2؈ce"ȅrz cAcàR/=-@1=,3iӶR/+! +fZ<aqF TpWa>wWXx5wP(5;b xxD  Fx:躎 wD"'2QI2 /UUp8cWZh4e˖K b$2[ n|-H1 gǑGM眄7oĊQtwށ/2[ѳ0^aBS(71-ZQ Ccƌ-=M1U߃ nwҶP(6ǖ-,a_켝0 հXX,Zc[⢪cƪIccboO` R c+~bsf/Dgs"x*0oרu_#m[t=BL7Lٿf&|.> f-YHVV@|zǙ«# ip;D̏H$BLY ݎ?(J%Ԕc 1Q K$tmܸ!5bʵ^vXtA/|pg1NvB3ƀgWH n1LqT?dAkP8=Rwv “:?˅OLi Il :iFܹc,I ,Q'\.,\_zٽfD^p m4*U(o~o]v W#RIOC1듅Xr}QBATVfkT;ڌŖ:r0r(~i3ۊ~BX֯_yj-y{ Pl [Z ݆ϟ>&:;:vjG3糓g}e^S1!T8.w0 _T(TQ:cpW!s; RV#Q @zֱ_TVVnLޗرbYǖ.] E$I+u(r$$ҏS9 q sOy~c55jF |2c|HE˝3Pyh(~ŨQpS3O#R 6 0JUU5e[br7ֱ;vر@ p8dNguVXӉ۷b`ӦrH 54ʮHo0 O>NgޞU%ùhp_S,Ji9 1Džg_`ɒyo$C11hP=:tpc^/F-#{@2+5] IQZ)||>رw>Uƍ:}yc/TuرcS[b&YK ա=gWd} +cGqY3pa/~EXo* $ 78綕+7Y Y_zUqME$zza3;Pc xawp0 ðb|mrBXnVTT8p7%KX(¦Me4H%wX>bdY@GGjk1A %@ 9b`ǎl땘xX7z=ŀRᜏ?;wߛ*ع2q8)PUVp80pc13>1 Bƿ!@l+tY { P~d)Ffe@k$A G0o?7x ^Ӛё4v#=֝46&b\f1W3V,nXӉ p:ztW޲}{.YO??24Hsg9l؊RА@*]F5R.\f~UcIGaF4jDG;aL(b(r0 c c8_ VFψglDqfQ@)_:METW' u?>_ //(~_\LƚqH-q9QWWs $Xd%5#'Ͼ(r--Xb?8)4$ |IؔNλbHEƴǁP(O>o6mM9,͂1Ru]g$ø-h'DMz}ћTTfAKehann#݈*|YmsNƚ5ʦ>ܹ ǜ9[Rzwp8 `ʒ^+81b0{y4ilذnZq{jȁfAMsD?5@ބa )8L 7)7>MeqҌXyx|Xzi^K)ws^9>_K )^~E1㤣pEw?d  Qvqu8? d ·,埚HrQ?ї~l{)Ʋe*2ƏSę7o,Y4,b'# ?/lڵsX6QoFSO9v,]/9sHŖ/)aX!ICR+VŢf冢s0.۪܄d]]=֮]Flܸ+a`ႯpԑaE/ V٨=~U2|f?^Yժ쳦NE8믿Z8?Srn-] rzjA*[+NSS |^?8| 6T}s>0?ds,H}s>s,c옖3Y[k6~<**lz2,] 03] `E.6060I 0 38 .ɷɁ)u@ʅVӮw ugҕ8ð|"m߾ >_@rVSH ]FιaŬ¤?##8mxcltUI$b Lf~^6lAe*pU{ S ׃(O$2rݳbbՂ?ի7z9KV[:rwA_9Dw>uWVV3a`-]^kQw@V@ l]$muQ*:PR@*7!~l [6-]IW6i͚Gr\a 'O@ιhmm篾!sE]!=̬vGhii9s40hLQ0cJeeXŖH en;!.[&vl#a/rv{T `VדoYp/pŒӯUISN>O;֛E@ K0pk ߂T T R9=H,V$Uhooij,^zm?ntgo^uzwixtx^r&L g5K. fm3b@)@QH` $UUI @9 ޺jkkѹBΆ ߔU674M?(bK'|Y˼ڈsΞn6|{&Z[s`NE"b $ ,EUUDѲ|,# \m]]=z酮S;v,KreXDH)o6B}> s(v؅OgC8\`0iַ.EUUTUff(p:eGdY鄢(䠃ʩ 8{TUE8.x|Q~HQ[[ܿF\ ؾÆ5bŊ^ Q ^?tVN'$9U6m㯿1v( qј8q_^ ,WZ6 3w>c裏#0knDQx^BA|M^F$A @$AgggxBETqUQQYtVC$8XVX,8$).v{\UUUBeTVVvgH~os@;($IaMiv#^ϞY )Fss+ -;w$`8N8~Ѣ|Vb\67|:k~QCA8[j4 BB!`n;i[GGB;:IC]OհZXuuumj|[ڽօ7(?wdY.+Bkk.ArR/ՊCTeinn=R#ߐ@9o䜿 yy:E^p2;  e}2J"+FuHfJb`ES&!fn&իW# b̙ B,&v{e $ssx1(W@ʕ+rr5/. iul"wthT;7{@j |eQWW /8sGt@(.@*&bP(bZ/>$!g~ œY͢]%oKb3fAv?-X\p\YN])hwY@S$R#s>s>0᯼!۴i[Q5j>k:1sD p({?bpZ݁M6&tBBBFKK3N ><빭{X1!&zV_w?ʪ ;:@ ԕzfHQ?5 }K//lٲ3guoۉO?M+^}p(k%m. #ѵLb ,a8(.v܁UB)i$q EQR}ub=RmK'*++izhY4QJ"6ͿGPY&5 $I&{@O4 q4o$e|qđs>3ֽ{Ν+<ӧ/\eKWvtYLm[Q_*&RgʘL_5egAhkkCCCCNjxTWהzjUb^#85a|iz^xGhj*a#e! Y5kVcǎhll@U+PSS*'*՗ٛ JKgbnu}.]MtE͖@21r2쉏B qέ8ǘW^h̘8WKtRߎ8ӎ? _@[nFss GA0@(烮z0 =D(Bp31b$ZT(kEe#( \P PU .,˨(D(%ԏDB ~ ^Q?V!WKK 4MCGG(~ 0:;;iG_͆B!~ؾs'1AC5! ۢ(AUA!c]?e$M( , l+*++`**+pTUp:+pT-  |]?;^(:;;Dӟ C܍2GժsJ|' $ QVU>KUs}pj08gΧXvSQTWW?7oŗ_,)H[[ .R,\W3OXsk+ nl۹;7 D$A8i˒$uY@ `B eBUո[m6[v;***PYYX.n$F"\:"KAIDATF47 EUj^ni{ i gW;S`O߯/pbeq9v\x)hkmǜٟ>ey{1rXl)&N,Ŋr`@bpPHsH I "DQ]*3W],&Pb¢lV+l6*{ TVV"eRfKDhll,J?Rb+2̵T7M Yd(狂pE;}$F¦*C.`n|҉Gf7>ZGG;jjj*~`>d+Ș/R (&SAACAAlٺPc0~? À$+-c]nJ)2t]7ŘCעˆ0dR STjKY6Tp8*`Za΢Vi;3Q_oo7bl)2u5AYz\HUsVZ =Mt8T;lD(NE(w?+zɓcܸx f--0rHf<\G7~J4"OEW?B @[{)ĂA!tv# DN$+dh*( v# tDBA YQ!+ TŢbbfjrcPaž(Kg "\Yl xAPQaQSUfݞXᨀQYnr1Y|>oƏ)|tuw>0|:=Qt;5],pPV nD(V+(B$p$pH$ ppu0u\ӠkQh!7AY,ֲ֬5mmm5z9CwsT,{46!նZ,,@䬰}[.gS?`OcmNʬebW1(,\s6=&aۅ^Te'17P.cc#:4݀n!3@tC7'7Fa0LȹY/a08})@^sl4b\%"HW1HG"1w 18c y:XW`$I0  0&@x&)H&@VdZkS$1s;c B&pÌy%X,r ֮l$(2xUosHҬ0V+$IZ΢tOCq[ tCVTH IQ * IlA$@AL0%8` j\`D5ZF4-A4BV՜Y}M *l$Qin6L>s R/2,aWC=mUe d8(H+lIp͢T_~E'Ә3y)pʞ0~ F_{3Rڂ}٧( һ(=h>_rLDrObM^9̪};e݋D"u;a wʊoux{G$A(۲P]H:{=1DQܭUG܊BĤ֮5Ȳ ]3nGlea:4MOMӒ. .dLQBsDQt(]Vb]X$X> CAl6; <)0o~y5jOŏJBPH$8aЍ5cpɉMpg*z֘alj'.. p_hՄ#GzG售tnaoDb\~v9G0sdr##y@ s[ux=.M Ŗ-gý8Գ0uQP(0`y$хR/$ `^R+9EQܪJ9ˋOpsAPh1^ iXp vl.Ji]-XvCpxד pq:RƎz@ d7$Ip8 bw,YObW|Jعs'*\yw+O?S;=P6lo YF@$^K!ȷj9fyrƚ_uGvA7n̛uaJ cQ___{sP(㎝_~%m𰡘S-thf$a#>X@B9>oQD GLcP{b&&XmvJ+U9$PQY kA` cJ& "b0UI:1kUURŤcSvL&@K.|z 2.b\|xWq 7caGzeԨzIyd<`ؠ(z"o7mvU~eIG'| m[pU믗ao:w9p0x$r#'F8 #Nn/30̠m @,BkTsz0qzgfQuC`ObZ"a2/םPEY"`XV-P,Sdv{+bf(qfw@`I*'$xC*()$Le94L~/[$k/?I'^z)Fo6o/8oã<ϴL+c 6nqIqɛIvM8Iɛ4g7]v؎  zzLzF;9Fkdt.=hhT'd8F) ,}+,c@W4pwJ~ՂKk&C{!X 7n#Cn #|-=s\- b3_3x/Uj{1knE?Ȕt<B3׃w1!ADP"aH^"Aa!V Vct: +M422`Yq֥ᰡT'ֵ\iĐ/x;G^ɧ7X$/vӭkp디Yh8zc|X`8kyi_h X ~@V))W~X5{L̞>^pӾӕFD \÷e)Nklny?>,O)IC^ z{ )3\Yhk'#"&Tgh]ʘ/EJ?/F55qNֵ8 o=P{gykK;1#hQ0u9m@u۬"eUҝVé(vI*BOU}UBLÆcM>`޼Y.Ñ˴d)8ik cuX)1{ Eb"#x}C!™:Njyim ̈́GOO&ODD#ؿ_VC)n'jj*(BhR| u@:c÷:|z{MM'5i2m4k$b1z:񏗒bʕ)>պ2zˮp8;/.((++DS]yhni׺硤$_'0Nr*M~QQ.z{ .ɈΣ|j)S+[.⚫DqA1wn\x<~GCCs\gJKqGDDtlV̟? ^ϛSֵHRJﮫ;gCKADD˗/DCc3jԺdd`qEQBi]XK`q<.Mǵ9h4@!^imxխZUUp +#SBh4~c}}Ŵ n/M`yy٨ /l߯/vBQ!YߢdNXGzLtu&DD496,[۶F׻ea kBCZףAR:zݔڭIIqN o[r`0qݵ"Rm~u=ZJ`N/ kVa:#*֮] !nEDŽw !?WCj[MZ`4 ""XϯA~~.|ꕤ賷xl Ew!FH`hI[[AtbZ_""`jfԊR<ե2\,ZT#/ѾH*5\ciߨ&TWOK/oƉZӎ޿**Zד,vRb!jPZu&" w⭷h] =>pACuK$RV8 G""(W\aǎZUUq-WSS]PEѥuM$iGd|~mWG /MXbzHRlBVȂl۵)$u@x}(DD4aؾMlܴKr u.bsBh]S2J)6WT, PdDDD d|{0),Y2ӧO !кd#HP8i@z}XZ_""JKd|SckXX; p$HHLӀDiZC0{Ll&^߸SrU+@J3B[w'dHq hwj-׉ejQP_ؘ[vA5-/ !B {HU=4c#"uXqbdee`Q_ߤuIcۅp:$s@ z͇m€DDDdZjRX}*ΛN<̫ZN_bx\st: lͷ!kZ@D =-E~A.6oك-[BJ`Vˢ\Htf8IHT*b1mn[:f/ ina%p8lXn6h]C\OMu)p/_d^H$rڵ.P:H2HcӦ[d҄T>| '|I]˓ Tk@sK;NL&֥z.] fV okv f55CJPRZu􋈈Fff:-hĺ^G]QK`A5-+tV_&dAUP6`ʔb "1TUU5^H$GY4HSqݵ˰|<^ht%.hkz{ EPX'Nj}] mXt>2PW׀_ٌp8uYˎ[o:VI|=F_R !‘pdWA~֥6oكYӵ.2|.{n=!iQ^^M47|dAd|dcwlj:`,p?t:ddd /~O={V^U+~B-h]dkN1 Ν3ݫuTWWnj] ]NܹxMp_O4HQ,]:~,Bp4vĿR>~` 97/l<-#"OL)œ0Mس xc7B9k7gg+v#(y&q1$FΛ;SEHöl Ղ)fϞ ӎflذ}ZuÆk,9BJ Bk]%$R1VabM,wͫ, [a_9g2C_BC{ߨu#l6 -?܀7߬Ӻ"Iva޼jec``^߉dhN5*bł^;5j!Du۴H KVbEQLKK//*PgG&snãC[^^:lۺZCD46̮BII!n݋{ŵ. iin\^$8j: ,a3]FjR5e- g8;=D_ >s.bZ\6m v96GŌi(Zx\7a}x2^ŋfcRQሣFIJAR!Zᴚ" \vktiuX=¶pF 2LцMϿ `]\9x"eRqv'"fjf@YY1q;Žo%]0[W,/VRbuv@RT+rUrVͮPW͝jZ:k S"2FX` 7Ww6ne D֚<ӀDD^G2TUU`Fl޲CZ..\{Bp80SlnYL#ENY^5\\=ҺlVr]Wx/j_y6W^Uٳa8FDtL&#* FMxcnh]ڻt*͝ kN 둘N;umt.5 ʹ[L;pުV*CaVor8#/y^B-]: }:tTrŌ L(8r8nۋ>K;ʊR,_>O:6W<"`qbX(zlݾjڅUЩm!D_ŬYkލMje-L&#=uIDDnÌRV EQpP#nۗ#FW"''R,S܊e3b5?f5<-kYAvj]v>`0k,a;&;"d(** QW׀m?mV֢0$!%.q\Sl)VX _="Y*ZM:׻P`Ŏ?)!+z|ƕxXI HkB砪j*2ց#ؾM y. =jkga*Wi]w&l4++f+ܽT9vk.0̻}^o!j]һ86|j:iv8qR뒈4c00S`Yc[xzɹKUU̚Ub| ɵ[.m<3%7{>f*MӺr`'Z:?^Lm@ⷎk,Cyyy mD4&TTLAEeL&#zkM%BTUa9n $}BN L@RŤ_VdJ;XI<ԫǓ/$@uuVZlܸ 9ND4E0SNAvvhllq2z'!fΜE knR"  OӄF`GiuuAAM/Z:t Ϯ۠u9甗_وcZDD4 FʦcjE)N"(j޽٣uy5uj1,TgBnk+OX ܸd[w]L;Wa׮xm69'рիa)h>q7D0|̉.Fzz*VLAqqt:ػ" k]ygc((8G|Wv[Lmɴu B_uuG v **JpvzG8DDh@iiKB,Ñ#DZo!$4)%F^^ز4B$$ED_U+M_0)KpX3z5Dɷ݊kY|tv`]к,"sB ''e%((ȅx#Zb*Fk|O<Ә&{߱ZrŨ0T^^<`EHIqȑcصs_ny%v|j `6 Pwu#Ҫ+1ont8lBJB<Bn/}`m+h]Pu-/%mSzjTcCػ-44gK"ҌGaaJJFvw㭷q_[$e]P-NCbp]QVvUl(Lfބ({n#=uIvbZ䣿wGKse$*sPRRl  =zz.86̛7U`4 ؕ֬u}|8t)4facӦ]ضMK jev:w&EQPP)S9jD}}Z[;hvZsTa)RUU! !DZGT ? sI}oZ50}PKԂn7[Ubyp:mhiiśʈ!|l6!XI:Ԉ<\良sT!77'k72b+_,NѶa5&Dxܹpբwk]> bv4,وNfۻ.EQ¢|d2BJv:؈#G_R̛;CO|{`W!D/qƔb|c֮N~O=MwT?O_FUUˎŦ7v'uөR,^Tˁ8fƖ^Gaa. NE$űc-hhlFcc E5PQQрib5G)fi]ۨDcxţx4wRO0}@rfmɾt:U嘿N }}8t(;?1 FAA.pDiѣ'](B855P\!~!ğ/8u4mQrŴ_ 0ٴl>ƈ z?D;:_h4qؽ{|5OU]PTB09ÇGDᰣ 9LDQ;vG4y\Ws8lU3ʥb>3l/]܍h85UUosZY 2SI):W| @W#G㕗k.ZaafLÔ)'qQvphB 33 y((ȁx~466'N%i瓛YՕ( Q$~ BF:ײҜ׬nE:/HǏ=%'7}`'#I)-~KhTn߱_l۶Xt:݊Y9 ^ GǧuyDt6 rsS}ًhlh]rzTL6v % Q1u4qɨpfimf^Zϩ?<f_0S/!q%R&"Gbc***1sf1G6U"z3ܬQH$v4/ϿB̘Q<(8Whb Ҹ^!UŒU Ũu#xuW=~W;P@ Kz )4<؈%ynv;P5 UUۭ#8ԌcNSpDIBQRRlddBQH)ً[qIvjz ?i?Cir٪lz0}>oLqhZp(ţ/?~e_X,0+zdr_Xb7R7-%+3 ,G8FKsdDGfV23Ґ w :;{Q:MY-(AUU22RO=8ȵE =ZD1t?[[/Xgy><Ԧ_K}0v7J)-x|rֽbq?b4PVVSKPT UUqIoj*3R B7ܨ7-8q Z;*,3*+K1}de&Nn[<dB4!]kiԫ[͟nᘜl{ ۫/5ZäNߐR~Eano7'۴,kԜ-,BadKZ[;]d`6̌4dd!5-4 mhni7/()ôiSPZZ u:ϞxXqD:Nw)N[M,.˻+d:Ha}z]ӫR\ 'iqk䝌FL)DٔB`CJ^lɖvӼƒ.s$ ed|>#h" !iJQ1DS?o: #BZIt.`QUկ}x^eܑh O#ں=PĜtҒRVhj:SF*BII>JK ~hoBG{RҤdZ =#zۻ{{ډֶNvo@GyY(//FYYi[W$F^Bp,%K HƟKݲLw~}oDzfs} [; )"$'-vl۾Ǐj]r9PZ|eA^pXJ&8lIt>9R#l~H$nv mm]vZZQ格eEl6!HC4.7 RbDcfKgZ(s"i}w <}7}-} uZ_%U)GJOOܾc8tq SU99(,AaAӡ(!/:zՃn Ml6+RR\HIq! D b:L99A```}Gooz{'|$m(12 $uu=}COoox1PZ)S y\J!;#E[&H4LJYRO !Rhllƞ':sB =ݍ,dd 3#))ΑPRJ y}{0N.NNNvm"b1}N QZZҒ\? `-C4 4waq`{tHOs##3HEzzoB G'5fv[1|oX4 $ o}}@_k%K HR,hnnÁ94駙pHOOJKK3CB0?q4墨0%4U!VIt2w(/ 6LJJQ8)ݍTn'\.ǻ~hqx&G,%cIUU&X,f-&XX-XV ,!`0NB^IMu8Ey((Ȗoq/xgA$\ nn<؀#Mzl]ËoOw# )&?B ȍNSa0`4&nf fSahF!АC/ y|$;Y(.Cqqۭ[?5$BBZKwI[Ht=\ 6P2Ö٭ۭmp8٬#gcr$(Ba}(P(P8P(4c8"(bhu7^?d4h4hЏ|l0a4yL!/^2?DQa.r2aZF>' !6!1BVqLzqBJYaxa'Ov GM]7WBb͋ f Vkc<2"b2aBÈFF#g:\lSG edQAQ3\H$:<e !!H0٬(B~~6G9AĎ3&Et!)$҇ ?&OZpX ,!UU0d2d4h2@U z:Tuxe1Nhi;-(ŊFc#7C$$Dh$:* # " zǟ?ErXr@^^v;%l8uBL 44I)|@hhlFcc3mFyYD^^S"1: BuM4 H ÷edssh<ւM'uKDIl6%:f"7'eC-6#1e6:iiR:X}z!Dکy<>?ފm8qkƈ^Cff2Ӑ6$B=I@JX5frӟK[>N.NCFF Ґ48CH\N1IHJFb n%Ta{AJ);:Ek[Z[;sh@zz SCiHOwKqjF]pQrb@"H)mji э8ymm }4Fj &_Gbgn{mh`@wRfXĮ93nэ^tv}nhB#5ř80=a,ǟ4xsn!D.') 8'=Agg::zFz%#Ռ\Aȩ.88ֳ'lB!1"TDCz!щ&$$럺-b:{:rDQtwj]>M"BHIu!5Ņ'Nx q?o:}~!  $$~rvy7_FZ ==}^moz{zpࠗttITUam> ~sd$G@ׇ28/[ #Q7 d.)QȐ k*-55zk*ґ~Ɠbq z?0A  zx$*vkvƆcz! 냌; ٸ7e8"袙 //Yf3=V@ =liI1'=x@=!"mp.dзofZ9O.&bvBol߲@CɋQR]0EQ>zO ?>{ZIJi @:Li\ܧ\︿0xoC"|Nǣ-zhxv5b ÑB$MBA 3~矮7著v~|CZwlB4.ҁ.f6 *G,t'2@"<4@tqyN Bhep/~  UѤƀDCS3-i]ٸ(|`x%z^! &O 4~qex JBxɍQ_0}<ikLerXM߽5hG#':<w8u=tY<mKz[5S7D]Z՜}mtxO=^~o 봮FEhs?;Lm~.4N7LDc@䲙n\εpǷxbj].(ApGCH|/_h؂-w+RJ=_ k&$x:!pI)iE) Ht,q,tX:TU9n9v}A`B ] 8O{l1=ZGDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4ґgq%tEXtdate:create2013-06-12T22:53:15+02:00%tEXtdate:modify2013-06-12T22:53:15+02:00O.IENDB`confclerk-0.6.0/data/data.qrc0000664000175000017500000000012412156157674015323 0ustar gregoagregoa confclerk.svg confclerk-0.6.0/data/confclerk.desktop0000664000175000017500000000025212156157674017246 0ustar gregoagregoa[Desktop Entry] Version=1.0 Type=Application Name=ConfClerk GenericName=Offline conference schedule application Exec=confclerk Icon=confclerk Categories=Office;Calendar; confclerk-0.6.0/data/confclerk.svg0000664000175000017500000022451012156157674016401 0ustar gregoagregoa image/svg+xml confclerk-0.6.0/data/confclerk.pod0000664000175000017500000001033712156157674016364 0ustar gregoagregoa=encoding utf8 =head1 NAME ConfClerk - offline conference schedule application =head1 SYNOPSIS B =head1 DESCRIPTION B is an application written in Qt, which makes conference schedules available offline. It displays the conference schedule from various views, supports searches on various items (speaker, speech topic, location, etc.) and enables you to select favorite events and create your own schedule. At the moment B is able to import schedules in XML format created by the PentaBarf conference management system (or frab) used by e.g. FOSDEM, DebConf, FrOSCon, Grazer Linuxtage, and the CCC. ConfClerk is targeted at mobile devices like the Nokia N810 and N900 but works on any sytem running Qt. =head1 OPTIONS None. =head1 CONFIGURATION The configuration can be done via the graphical interface. The configuration is saved in the default QSettings location, i.e.: =over =item Linux F<~/.config/Toastfreeware/ConfClerk.conf> =item Windows In the registry (search for the Toastfreeware key, should be at F). =item Other OS Cf. the QSettings documentation at L. =back =head1 FILES B keeps its database in the location proposed by the XDG Base Directory specification L: So the configuration (see L) is stored at F<~/.config/Toastfreeware/ConfClerk.conf> and the database is kept at F<~/.local/share/data/Toastfreeware/ConfClerk/ConfClerk.sqlite>. =head1 COPYRIGHT AND LICENSE =head2 Main code Copyright (C) 2010 Ixonos Plc. Copyright (C) 2011-2013, Philipp Spitzer Copyright (C) 2011-2013, gregor herrmann Copyright (C) 2011-2013, Stefan Strahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =head2 Additional resources =over =item data/confclerk.*: Copyright (C) 2011, Christian Kling This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. =item icons/* All icons are taken from the Debian package gnome-icon-theme, which contains the following notice (as of 2011-06-24): Copyright © 2002-2008: Ulisse Perusin Riccardo Buzzotta Josef Vybíral Hylke Bons Ricardo González Lapo Calamandrei Rodney Dawes Luca Ferretti Tuomas Kuosmanen Andreas Nilsson Jakub Steiner GNOME icon theme is distributed under the terms of either GNU LGPL v.3 or Creative Commons BY-SA 3.0 license. =item src/icons/favourite*, src/icons/alarm*, src/icons/collapse*, src/icons/expand*: Copyright (C) 2012, Philipp Spitzer Copyright (C) 2012, Stefan Strahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. =back confclerk-0.6.0/docs/0000775000175000017500000000000012156157674013725 5ustar gregoagregoaconfclerk-0.6.0/docs/fosdem-schedule/0000775000175000017500000000000012156157674016774 5ustar gregoagregoaconfclerk-0.6.0/docs/fosdem-schedule/AUTHORS0000664000175000017500000000225512156157674020050 0ustar gregoagregoaAuthors of fosdem-schedule. Copyright (C) 2010 Ixonos Plc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. Francisco Fortes Matus Hanzes Martin Komara Marek Timko Matus Uzak Monika Berendova Pavol Korinek Pavol Pavelka Maksim Kirillov Files add.png, reload.png, remove.png in src/icons/ directory are taken from Ubuntu package gnome-icon-theme. Copyright notice for them copied here: > This package was debianized by Takuo KITAME on > Fri, 17 Jan 2003 14:57:28 +0900. > > It was downloaded from > > Copyright © 2002-2008: > Ulisse Perusin > Riccardo Buzzotta > Josef Vybíral > Hylke Bons > Ricardo González > Lapo Calamandrei > Rodney Dawes > Luca Ferretti > Tuomas Kuosmanen > Andreas Nilsson > Jakub Steiner confclerk-0.6.0/docs/fosdem-schedule/INSTALL0000664000175000017500000000271112156157674020026 0ustar gregoagregoaThis is the INSTALL file for the fosdem-schedule distribution. Copyright (C) 2010 Ixonos Plc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. NOTE ==== fosdem-schedule is an application intended for Nokia N810 and N900 Internet tablet devices. Therefor the preferred distribution is a Debian package. Notice the different release of the Maemo platform on each of the devices, which requires a specific Debian package. Maemo is a trademark of Nokia Corporation. Debian is a registered trademark owned by SPI in the United States, and managed by the debian project, as explained on their site. Basic Installation ================== 1. Type `qmake' to generate Makefiles. 2. Type `make' to compile the source code. 3. Type `make install' to install the executable. 4. Type `make uninstall' to remove all installed files form your system. Maemo Package Building ====================== 1. Type `qmake' to generate Makefiles. 2. Check the "Build-Depends" section of the control file for required packages. Maemo 3 (Diablo) specific: - Ignore the version strings when building a package for Maemo 3 (Diablo). - Optification of the package is not explicitly required, to disable it comment out the "maemo-optify $(PKG_NAME)" line in debian/rules. 3. Type `dpkg-buildpackage -rfakeroot -b -uc' to build a package. confclerk-0.6.0/docs/fosdem-schedule/NEWS0000664000175000017500000000142012156157674017470 0ustar gregoagregoa This NEWS file records noteworthy changes, very tersely. Version 0.3 (3 Feb 2010) * Performance improvement for events. Version 0.2 (2 Feb 2010) * Search tab has been added. * Alarms handled by alarmd, which requests native alarm dialogs (N900 only). * A service is registered to DBus, the application is handling calls from alarm dialogs to reflect alarm states into the database. The application is started if required (N900 only). Version 0.1 (19 Jan 2010) * A user can select favourite events, which are displayed in "Favourites" tab. * FOSDEM icon is displayed in application manager and in applications menu. * Optification of the package is done using maemo-optify script. * There is now a `NEWS' file (this one), giving a history of user-visible changes. confclerk-0.6.0/docs/fosdem-schedule/README0000664000175000017500000000461512156157674017662 0ustar gregoagregoaThis is the README file for the fosdem-schedule distribution. Copyright (C) 2010 Ixonos Plc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. fosdem-schedule is an application written in Qt, which makes the FOSDEM conference schedule available offline. It displays the conference schedule from various views, support searches on various items (speaker, speech topic, location, etc.) and enables you to select favorite events and create your own schedule. For Nokia N810 and N900. See the file ./INSTALL for building and installation instructions. Primary distribution point: http://sourceforge.net/projects/fosdem-maemo/ Home page: http://sourceforge.net/apps/mediawiki/fosdem-maemo/ Mailing list: fosdem-maemo-devel@lists.sourceforge.net - please use this list for all discussion: bug reports, enhancements, etc. - archived at: http://sourceforge.net/mailarchive/forum.php?forum_name=fosdem-maemo-devel - anyone is welcome to join the list; to do so, visit https://lists.sourceforge.net/lists/listinfo/fosdem-maemo-devel Bug reports: Please include enough information for the maintainers to reproduce the problem. Generally speaking, that means: - the contents of any input files necessary to reproduce the bug and command line invocations of the program(s) involved (crucial!). - a description of the problem and any samples of the erroneous output. - the version number of the program(s) involved (use --version). - hardware, operating system, and compiler versions (uname -a). - anything else that you think would be helpful. Patches are most welcome; if possible, please make them with diff -c and include ChangeLog entries. fosdem-schedule is free software. See the file COPYING for copying conditions. About FOSDEM 2010: The tenth FOSDEM is a two-day event organized by volunteers to promote the widespread use of Free and Open Source software. Taking place in the beautiful city of Brussels (Belgium), FOSDEM meetings are recognized as "The best Free Software and Open Source events in Europe". FOSDEM name and FOSDEM brain icon are Trademarks of FOSDEM ASBL, which gave this project the rights to use the brain icon and name. Copying and distribution of the FOSDEM brain icon must follow the Creative Commons Attribution-Noncommercial-No Derivative Works 2.0 Belgium License.confclerk-0.6.0/docs/fosdem-schedule/user-stories.txt0000664000175000017500000000266412156157674022211 0ustar gregoagregoa As an user I would like to have following features available in FOSDEM application: o Id like to see all events for current day (default: current time) o Id like to see all events for other days o Id like to see all events grouped by activity o Id like to see all events grouped by room o Id like to see all details about selected event o In detail view, Id like to have option to show room on the map o If there are some links in the event detail, Id like to have option to open link in browser o In detail view, Id like to add/remove event to/from favorites o Id like to search events by title/abstract, speaker name, tags, activity category, room number/name o Id like to see my favorite events o Id like to be noticed when some of my favorite events are overlapping o Id like to add reminder into calendar for selected event o Id like to see which events are added to calendar or to favorites o Id like to option to update list of events through the web -------------------------------------------------------------------- o I'd like to have "my track" -- the personal schedule of events the user would like to attend. o I wish to have "now button" to show me what's ongoing now. ==================================================================== o I'd like to have possibility to post to eg. twitter or facebook -- some button to easy post on twitter "I'm attending now this". confclerk-0.6.0/docs/fosdem-schedule/Changelog0000664000175000017500000000000012156157674020574 0ustar gregoagregoaconfclerk-0.6.0/BUGS0000664000175000017500000000012012156157674013451 0ustar gregoagregoaBugs are managed in our trac system: http://www.toastfreeware.priv.at/confclerk