--- /dev/null
+#############################################################################
+# Makefile for building: bootscreen
+# Generated by qmake (2.01a) (Qt 4.6.2) on: Mon Feb 22 01:04:53 2010
+# Project: bootscreen.pro
+# Template: app
+# Command: /opt/qt4-maemo5/bin/qmake-qt4 -unix -o Makefile bootscreen.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+DEFINES = -DQT_GL_NO_SCISSOR_TEST -DQT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH=1024 -DQT_NO_DEBUG -DQT_MAEMO5_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS = -pipe -O3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wall -W -D_REENTRANT $(DEFINES)
+CXXFLAGS = -pipe -O3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wall -W -D_REENTRANT $(DEFINES)
+INCPATH = -I/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/linux-g++-maemo5 -I. -I/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/include/QtCore -I/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/include/QtGui -I/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/include/QtMaemo5 -I/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/include -I.
+LINK = g++
+LFLAGS = -Wl,-rpath-link,/usr/lib -Wl,-O1 -Wl,--hash-style=gnu -Wl,-rpath,/opt/qt4-maemo5/lib
+LIBS = $(SUBLIBS) -L/opt/qt4-maemo5/lib -lQtMaemo5 -L/opt/qt4-maemo5/lib -L/usr/X11R6/lib -lQtDBus -lQtXml -lQtGui -lQtCore -lpthread
+AR = ar cqs
+RANLIB =
+QMAKE = /opt/qt4-maemo5/bin/qmake-qt4
+TAR = tar -cf
+COMPRESS = gzip -9f
+COPY = cp -f
+SED = sed
+COPY_FILE = $(COPY)
+COPY_DIR = $(COPY) -r
+STRIP = strip
+INSTALL_FILE = install -m 644 -p
+INSTALL_DIR = $(COPY_DIR)
+INSTALL_PROGRAM = install -m 755 -p
+DEL_FILE = rm -f
+SYMLINK = ln -f -s
+DEL_DIR = rmdir
+MOVE = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR = mkdir -p
+
+####### Output directory
+
+OBJECTS_DIR = ./
+
+####### Files
+
+SOURCES = bootscreen.cpp \
+ main.cpp \
+ bootscreenR.cpp moc_bootscreen.cpp
+OBJECTS = bootscreen.o \
+ main.o \
+ bootscreenR.o \
+ moc_bootscreen.o
+DIST = /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/unix.conf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/linux.conf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/qconfig.pri \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_functions.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_config.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/exclusive_builds.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_pre.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/release.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_post.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/warn_on.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/unix/thread.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/moc.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/resources.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/uic.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/yacc.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/lex.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/include_source_dir.prf \
+ bootscreen.pro
+QMAKE_TARGET = bootscreen
+DESTDIR =
+TARGET = bootscreen
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile $(TARGET)
+
+$(TARGET): $(OBJECTS)
+ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: bootscreen.pro /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/linux-g++-maemo5/qmake.conf /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/unix.conf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/linux.conf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/qconfig.pri \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_functions.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_config.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/exclusive_builds.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_pre.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/release.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_post.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/warn_on.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/unix/thread.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/moc.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/resources.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/uic.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/yacc.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/lex.prf \
+ /targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/include_source_dir.prf \
+ /opt/qt4-maemo5/lib/libQtMaemo5.prl \
+ /opt/qt4-maemo5/lib/libQtDBus.prl \
+ /opt/qt4-maemo5/lib/libQtXml.prl \
+ /opt/qt4-maemo5/lib/libQtCore.prl \
+ /opt/qt4-maemo5/lib/libQtGui.prl
+ $(QMAKE) -unix -o Makefile bootscreen.pro
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/unix.conf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/common/linux.conf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/qconfig.pri:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_functions.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt_config.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/exclusive_builds.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_pre.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/release.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/default_post.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/warn_on.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/qt.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/unix/thread.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/moc.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/resources.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/uic.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/yacc.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/lex.prf:
+/targets/FREMANTLE_ARMEL/opt/qt4-maemo5/mkspecs/features/include_source_dir.prf:
+/opt/qt4-maemo5/lib/libQtMaemo5.prl:
+/opt/qt4-maemo5/lib/libQtDBus.prl:
+/opt/qt4-maemo5/lib/libQtXml.prl:
+/opt/qt4-maemo5/lib/libQtCore.prl:
+/opt/qt4-maemo5/lib/libQtGui.prl:
+qmake: FORCE
+ @$(QMAKE) -unix -o Makefile bootscreen.pro
+
+dist:
+ @$(CHK_DIR_EXISTS) .tmp/bootscreen1.0.0 || $(MKDIR) .tmp/bootscreen1.0.0
+ $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/bootscreen1.0.0/ && $(COPY_FILE) --parents bootscreen.h bootscreenR.h .tmp/bootscreen1.0.0/ && $(COPY_FILE) --parents bootscreen.cpp main.cpp bootscreenR.cpp .tmp/bootscreen1.0.0/ && (cd `dirname .tmp/bootscreen1.0.0` && $(TAR) bootscreen1.0.0.tar bootscreen1.0.0 && $(COMPRESS) bootscreen1.0.0.tar) && $(MOVE) `dirname .tmp/bootscreen1.0.0`/bootscreen1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/bootscreen1.0.0
+
+
+clean:compiler_clean
+ -$(DEL_FILE) $(OBJECTS)
+ -$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+ -$(DEL_FILE) $(TARGET)
+ -$(DEL_FILE) Makefile
+
+
+install: $(TARGET) install_app install_dsk install_sd install_evd install_scr
+
+install_app:
+ $(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)/opt/bootscreen/$(QMAKE_TARGET)
+
+install_dsk:
+ $(INSTALL_FILE) data/$(QMAKE_TARGET).desktop $(DESTDIR)/usr/share/applications/hildon/$(QMAKE_TARGET).desktop
+
+install_sd:
+ $(INSTALL_FILE) data/$(QMAKE_TARGET).sudoers $(DESTDIR)/etc/sudoers.d/$(QMAKE_TARGET).sudoers
+
+install_evd:
+ $(INSTALL_FILE) data/$(QMAKE_TARGET) $(DESTDIR)/etc/event.d/$(QMAKE_TARGET)
+
+install_scr:
+ $(INSTALL_FILE) script/$(QMAKE_TARGET) $(DESTDIR)/usr/bin/$(QMAKE_TARGET)
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_bootscreen.cpp
+compiler_moc_header_clean:
+ -$(DEL_FILE) moc_bootscreen.cpp
+moc_bootscreen.cpp: bootscreen.h
+ /opt/qt4-maemo5/bin/moc $(DEFINES) $(INCPATH) bootscreen.h -o moc_bootscreen.cpp
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+ -$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean
+
+####### Compile
+
+bootscreen.o: bootscreen.cpp bootscreen.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o bootscreen.o bootscreen.cpp
+
+main.o: main.cpp bootscreen.h \
+ bootscreenR.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+bootscreenR.o: bootscreenR.cpp bootscreenR.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o bootscreenR.o bootscreenR.cpp
+
+moc_bootscreen.o: moc_bootscreen.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_bootscreen.o moc_bootscreen.cpp
+
+####### Install
+
+install: FORCE
+
+uninstall: FORCE
+
+FORCE:
+
--- /dev/null
+#include "bootscreen.h"
+
+#include <QtMaemo5>
+
+BootScreen::BootScreen(QWidget *parent)
+ : QMainWindow(parent)
+{
+ hildonWelcome = "/etc/hildon-welcome.d/";
+ videosDir = "/opt/bootscreen/media/";
+ checkSettings();
+
+ filterGroup = new QActionGroup(this);
+ filterGroup->setExclusive(true);
+ mRandom = new QAction(tr("Random"), filterGroup);
+ mRandom->setCheckable(true);
+ mMultiple = new QAction(tr("Multiple"), filterGroup);
+ mMultiple->setCheckable(true);
+
+ //laod settings
+ if(random)
+ mRandom->setChecked(true);
+ else
+ mMultiple->setChecked(true);
+
+
+ connect(mRandom, SIGNAL(toggled(bool)), this, SLOT(disableSelection(bool)));
+ connect(mMultiple, SIGNAL(toggled(bool)), this, SLOT(selectMultiple(bool)));
+
+ menuBar()->addActions(filterGroup->actions());
+
+ menuBar()->addAction(tr("Add"), this, SLOT(addVideo()));
+ menuBar()->addAction(tr("Remove"), this, SLOT(removeVideos()));
+
+ createList();
+}
+
+void BootScreen::checkSettings()
+{
+ QDir dir("/home/user");
+ if (!dir.cd(".bootscreen")) {
+ qWarning("Cannot find the \".bootscreen/\" directory");
+ dir.mkdir(".bootscreen");
+ if (!dir.cd(".bootscreen")) {
+ qWarning("Cannot create the \".bootscreen/\" directory");
+
+ //terminar applicacao
+ }
+ }
+ settingsFile.setFileName(dir.filePath("settings.ini"));
+ if (!settingsFile.exists())
+ restoreSettings();
+ else{
+ QSettings tempSettings(settingsFile.fileName(),QSettings::IniFormat);
+ random = tempSettings.value("random").toBool();
+ }
+}
+
+void BootScreen::createList()
+{
+ QWidget *central = new QWidget();
+
+ QVBoxLayout *lay = new QVBoxLayout(central);
+ lay->setSpacing(8);
+ lay->setContentsMargins(0, 0, 0, 15);
+
+ list = new QListWidget();
+
+
+ list->setSelectionMode(QAbstractItemView::MultiSelection);
+
+ QDir dirHildon(hildonWelcome);
+ dirHildon.setFilter(QDir::Files | QDir::NoSymLinks);
+ dirHildon.setSorting(QDir::Name);
+
+ QFileInfoList ls = dirHildon.entryInfoList();
+ for (int i = 0; i < ls.size(); ++i) {
+ QFileInfo fileInfo = ls.at(i);
+ QSettings tempSettings(fileInfo.absoluteFilePath(),QSettings::IniFormat);
+ tempSettings.beginGroup("hildon-welcome");
+
+ QFileInfo prettyName(tempSettings.value("filename").toString());
+ list->addItem(QString("%1").arg(prettyName.fileName()));
+ mediaFiles[prettyName.fileName()] = tempSettings.value("filename").toString();
+
+
+ qDebug() << fileInfo.absoluteFilePath() << endl;
+ qDebug() << tempSettings.value("filename") << endl;
+ }
+
+
+ QListWidgetItem *temp;
+ int listSize = list->count();
+ //activate items
+ for(int i = 0; i < listSize; i++){
+ temp = list->item(i);
+ if(temp)
+ temp->setSelected(true);
+ }
+
+ if(random)
+ list->setSelectionMode(QAbstractItemView::NoSelection);
+
+ //Add hands video
+
+ if(!mediaFiles.contains("Hands-v32-h264.avi")){
+ QFileInfo handsTmp("/usr/share/hildon-welcome/media/Hands-v32-h264.avi");
+ if(handsTmp.exists()){
+ mediaFiles[handsTmp.fileName()] = handsTmp.absoluteFilePath();
+ list->addItem(QString("%1").arg(handsTmp.fileName()));
+ }
+ }
+
+ QDir dir(videosDir);
+ dir.setFilter(QDir::Files | QDir::NoSymLinks);
+ dir.setSorting(QDir::Name);
+ //if empty show warning to add a file via menu
+
+ ls = dir.entryInfoList();
+ for (int i = 0; i < ls.size(); ++i) {
+ QFileInfo fileInfo = ls.at(i);
+ if(!mediaFiles.contains(fileInfo.fileName())){
+ mediaFiles[fileInfo.fileName()] = fileInfo.absoluteFilePath();
+ list->addItem(QString("%1").arg(fileInfo.fileName()));
+ }
+ qDebug() << fileInfo.absoluteFilePath() << endl;
+
+ }
+
+ // for(int i =0; i < 8; i++){
+ // list->addItem("bbr");
+ //}
+
+ lay->addWidget(list);
+
+ QHBoxLayout *layButtons = new QHBoxLayout();
+ up = new QPushButton("Up");
+ down = new QPushButton("Down");
+
+ if(random){
+ up->setEnabled(false);
+ down->setEnabled(false);
+ }
+
+ layButtons->addWidget(up);
+ layButtons->addWidget(down);
+ lay->addLayout(layButtons);
+
+ connect(up, SIGNAL(clicked()), this, SLOT(moveUp()));
+ connect(down, SIGNAL(clicked()), this, SLOT(moveDown()));
+
+ setCentralWidget(central);
+}
+
+void BootScreen::addVideo()
+{
+ QString filePath = QFileDialog::getOpenFileName(this,
+ tr("Open file"), "/home/user/MyDocs", tr("Video Files (*.avi)"));
+ qDebug() << filePath << endl;
+
+ if(filePath != ""){
+ QFile fileCopy(filePath);
+ QFileInfo fileInfo(filePath);
+ QString newFilePath = videosDir + fileInfo.fileName();
+ qDebug() << newFilePath << endl;
+ qDebug() << fileInfo.size() << endl;
+ if(fileInfo.size() > 11100000)
+ QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> The selected file is too big</font>",
+ QMaemo5InformationBox::DefaultTimeout);
+
+ else{
+ QFile tempTest(newFilePath);
+ if(tempTest.exists())
+ QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> The file already exists</font>",
+ QMaemo5InformationBox::DefaultTimeout);
+ else{
+ bool result = fileCopy.copy(newFilePath);
+ // tamanho
+ if(result)
+ list->addItem(QString("%1").arg(fileInfo.fileName()));
+ else
+ QMaemo5InformationBox::information(this, "<font color=black>Error copying file</font>",
+ QMaemo5InformationBox::DefaultTimeout);
+ }
+ }
+
+ //add somewhere
+ }
+
+}
+
+void BootScreen::removeVideos()
+{
+ QListWidgetItem *temp;
+ QList <QListWidgetItem *> selectedItems = list->selectedItems();
+ if(selectedItems.size()>0){
+ QDir vidDir(videosDir);
+ QMessageBox msgBox;
+ int ret = QMessageBox::information(this, tr("Remove files"), tr("Remove selected file(s) ?"), QMessageBox::Yes | QMessageBox::No);
+
+ if(ret == QMessageBox::Yes){
+ for(int i=0; i< selectedItems.size();i++){
+ temp = selectedItems.at(i);
+ bool result = vidDir.remove(temp->text());
+ qDebug() << result << " :" << temp->text() << endl;
+
+ if(result){
+ int rw = list->row(temp);
+ temp = list->takeItem(rw);
+ delete temp;
+ }
+ }
+ }
+ }
+
+}
+
+void BootScreen::moveUp()
+{
+ int currentRow = list->currentRow();
+ if (currentRow == 0) return;
+ QListWidgetItem * currentItem = list->takeItem(currentRow);
+ list->insertItem(currentRow - 1, currentItem);
+ list->setCurrentRow(currentRow - 1);
+}
+
+void BootScreen::moveDown()
+{
+ int currentRow = list->currentRow();
+ if (currentRow >= list->count()-1) return;
+ QListWidgetItem * currentItem = list->takeItem(currentRow);
+ list->insertItem(currentRow + 1, currentItem);
+ list->setCurrentRow(currentRow + 1);
+}
+
+void BootScreen::disableSelection(bool state)
+{
+ if(state){
+ up->setEnabled(false);
+ down->setEnabled(false);
+ QListWidgetItem *temp;
+ int listSize = list->count();
+ //disable items
+ QTime fixTime(0, 0, 0);
+ qsrand(fixTime.secsTo(QTime::currentTime()));
+ int randomNumb = qrand() % listSize;
+ qDebug() << randomNumb << endl;
+ for(int i = 0; i < listSize; i++){
+ temp = list->item(i);
+ if(temp){
+ if(i == randomNumb)
+ temp->setSelected(true);
+ else
+ temp->setSelected(false);
+ }
+ }
+ list->setSelectionMode(QAbstractItemView::NoSelection);
+ QMaemo5InformationBox::information(this, "<font color=black><b>Random mode:</b> Selection disabled</font>",
+ QMaemo5InformationBox::DefaultTimeout);
+ }
+
+ random = true;
+}
+
+void BootScreen::selectMultiple(bool state)
+{
+ if(state){
+ up->setEnabled(true);
+ down->setEnabled(true);
+ list->setSelectionMode(QAbstractItemView::MultiSelection);
+ random = false;
+ }
+}
+
+void BootScreen::writeSettings()
+{
+ QSettings settings(settingsFile.fileName(),QSettings::IniFormat);
+ settings.setValue("random", random);
+}
+
+void BootScreen::restoreSettings()
+{
+ qDebug() << settingsFile.fileName() << endl;
+
+ if (!settingsFile.open(QIODevice::ReadWrite | QIODevice::Text))
+ qWarning("Cannot create the settings file"); //abord
+
+ QTextStream out(&settingsFile);
+ out << "random=false" << endl;
+
+ random = false;
+}
+
+void BootScreen::writeFiles(){
+
+ //remove old files
+ QDir dir(hildonWelcome);
+ dir.setFilter(QDir::Files);
+
+ QFileInfoList ls = dir.entryInfoList();
+ for (int i = 0; i < ls.size(); ++i) {
+ QFileInfo fileInfo = ls.at(i);
+ bool result = dir.remove(fileInfo.fileName());
+ qDebug() << result << " :" << fileInfo.fileName() << endl;
+ }
+
+ QListWidgetItem *temp;
+ for(int i=0; i< list->count();i++){
+ temp = list->item(i);
+ if(temp->isSelected())
+ if(random)
+ createFile(temp->text(), 0);
+ else
+ createFile(temp->text(), i);
+ }
+}
+
+void BootScreen::createFile(QString filename, int index)
+{
+ QString ind = QString::number(index);
+ if(mediaFiles.contains(filename)){
+ QFile confFile(hildonWelcome + ind + ".conf");
+ qDebug() << confFile.fileName() << endl;
+ if (!confFile.open(QIODevice::ReadWrite | QIODevice::Text))
+ qWarning("Cannot create the settings file"); //abord
+
+ else{
+ QString filePath = mediaFiles.value(filename);
+ QTextStream out(&confFile);
+ out << "[hildon-welcome]" << endl;
+ out << "filename=" << filePath << endl;
+ }
+ }
+ else
+ qDebug() << "print a error" << endl;
+}
+
+void BootScreen::closeEvent(QCloseEvent *event)
+{
+ writeSettings();
+ writeFiles();
+ event->accept();
+}
+
+BootScreen::~BootScreen()
+{
+}
+
+
--- /dev/null
+#include <QtGui>
+#include <QMainWindow>
+
+#ifndef BOOTSCREEN_H
+#define BOOTSCREEN_H
+
+
+struct bootConfFile {
+ QFileInfo name;
+ QFileInfo confFile;
+};
+
+class BootScreen : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ BootScreen(QWidget *parent = 0);
+ virtual ~BootScreen();
+
+protected:
+ void closeEvent(QCloseEvent *event);
+
+private:
+ void checkSettings();
+ void createList();
+ void writeSettings();
+ void restoreSettings();
+ void writeFiles();
+ void createFile(QString filename, int index);
+ bool random;
+ QString hildonWelcome;
+ QString settingsPath;
+ QString videosDir;
+ QFile settingsFile;
+ QActionGroup *filterGroup;
+ QAction *mRandom;
+ QAction *mMultiple;
+ QHash <QString, QString> mediaFiles;
+ QListWidget *list;
+ QPushButton *up;
+ QPushButton *down;
+
+private slots:
+ void addVideo();
+ void removeVideos();
+ void disableSelection(bool state);
+ void selectMultiple(bool state);
+ void moveUp();
+ void moveDown();
+};
+
+#endif // BOOTSCREEN_H
--- /dev/null
+TARGET = bootscreen
+
+HEADERS += bootscreen.h \
+ bootscreenR.h
+SOURCES += bootscreen.cpp \
+ main.cpp \
+ bootscreenR.cpp
+QT += maemo5
+
+
+install_app.commands = $(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)/opt/bootscreen/$(QMAKE_TARGET)
+install_dsk.commands = $(INSTALL_FILE) data/$(QMAKE_TARGET).desktop $(DESTDIR)/usr/share/applications/hildon/$(QMAKE_TARGET).desktop
+install_sd.commands = $(INSTALL_FILE) data/$(QMAKE_TARGET).sudoers $(DESTDIR)/etc/sudoers.d/$(QMAKE_TARGET).sudoers
+install_evd.commands = $(INSTALL_FILE) data/$(QMAKE_TARGET) $(DESTDIR)/etc/event.d/$(QMAKE_TARGET)
+install_scr.commands = $(INSTALL_FILE) script/$(QMAKE_TARGET) $(DESTDIR)/usr/bin/$(QMAKE_TARGET)
+#install_p48.commands = $(INSTALL_FILE) data/$(QMAKE_TARGET)_48.png $(DESTDIR)/usr/share/icons/hicolor/48x48/apps/$(QMAKE_TARGET).png
+#install_p64.commands = $(INSTALL_FILE) data/$(QMAKE_TARGET)_64.png $(DESTDIR)/usr/share/icons/hicolor/64x64/apps/$(QMAKE_TARGET).png
+install.depends = $(TARGET) install_app install_dsk install_sd install_evd install_scr
+QMAKE_EXTRA_TARGETS += install install_app install_dsk install_sd install_evd install_scr
--- /dev/null
+#include "bootscreenR.h"
+
+#include <QDir>
+#include <QTime>
+#include <QSettings>
+#include <QDebug>
+
+BootScreenR::BootScreenR()
+{
+ logFile.setFileName("/home/user/.bootscreen/log.txt");
+
+ if (!logFile.open(QIODevice::ReadWrite | QIODevice::Text))
+ qDebug() << "Can't write log" << endl;
+
+ QTextStream out(&logFile);
+ out << "log" << endl;
+ QDir dir("/home/user/");
+ if (dir.cd(".bootscreen")) {
+ settingsFile.setFileName(dir.filePath("settings.ini"));
+ if (settingsFile.exists()){
+ QSettings tempSettings(settingsFile.fileName(),QSettings::IniFormat);
+ bool random = tempSettings.value("random").toBool();
+ if(random)
+ selectRandomFile();
+ }
+ else
+ out << "Can't read settings file1111" << endl;
+ }
+ else
+ out << "Can't read settings file2222" << endl;
+
+}
+
+void BootScreenR::selectRandomFile()
+{
+ QTextStream out(&logFile);
+ //currentFile
+ QSettings settings("/etc/hildon-welcome.d/0.conf",QSettings::IniFormat);
+ if (!settings.isWritable())
+ out << "Can't Write hildon-welcome settings" << endl;
+
+ else{
+ settings.beginGroup("hildon-welcome");
+ QString currentFile = settings.value("filename").toString();
+
+ QDir videosDir("/opt/bootscreen/media");
+ videosDir.setFilter(QDir::Files | QDir::NoSymLinks);
+ videosDir.setSorting(QDir::Name);
+ QFileInfoList ls = videosDir.entryInfoList();
+ for (int i = 0; i < ls.size(); ++i) {
+ QFileInfo fileInfo = ls.at(i);
+ if(fileInfo.absoluteFilePath() != currentFile)
+ files.append(fileInfo.absoluteFilePath());
+ }
+
+ if(files.size()>0){
+ QTime fixTime(0, 0, 0);
+ qsrand(fixTime.secsTo(QTime::currentTime()));
+ int randomNumb = qrand() % files.size();
+ settings.setValue("filename", files.at(randomNumb));
+ }
+ else
+ out << "Can't randomize: Only one file in the media directory." << endl;
+ }
+}
+
+BootScreenR::~BootScreenR()
+{
+}
--- /dev/null
+#include <QFile>
+#include <QTextStream>
+
+#ifndef BOOTSCREENR_H
+#define BOOTSCREENR_H
+
+class BootScreenR
+{
+
+public:
+ BootScreenR();
+ virtual ~BootScreenR();
+
+private:
+ void selectRandomFile();
+ QFile settingsFile;
+ QFile logFile;
+ QList<QString> files;
+};
+
+#endif // BOOTSCREENR_H
--- /dev/null
+description "BootScreen manager - Chooses a random bootscreen file"
+author "Valerio Valerio"
+
+start on XSESSIONS_STARTING
+
+script
+ /opt/bootscreen/bootscreen --random
+end script
+
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+Version=0.1
+Type=Application
+Name=BootScreen
+Exec= sudo /usr/bin/bootscreen
+Icon=
+MimeType=application/x-example;
+
--- /dev/null
+user ALL = NOPASSWD: /usr/bin/bootscreen
--- /dev/null
+bootscreen (0.1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Valerio Valerio <vdv100@gmail.com> Sun, 21 Feb 2010 21:37:58 +0000
--- /dev/null
+Source: bootscreen
+Section: user/system
+Priority: optional
+Maintainer: Valerio Valerio <vdv100@gmail.com>
+Build-Depends: debhelper (>= 5), libqt4-maemo5-dev
+Standards-Version: 3.7.2
+
+Package: bootscreen
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: bootscreen manager
+ Manage the system startup media. Add multiple videos or play a random video on boot.
+ .
+XB-Maemo-Display-Name: BootScreen
+
--- /dev/null
+This package was debianized by Valerio Valerio <vdv100@gmail.com> on
+Sun, 21 Feb 2010 22:36:02 +0000.
+
+It was downloaded from
+
+Upstream Author :Valerio Valerio <vdv100@gmail.com>
+
+Copyright:
+
+ Copyright (C) 2010 - Valerio Valerio <vdv100@gmail.com>
+
+License:
+
+ This package 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 package 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 package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+The Debian packaging is (C) 2010, Valerio Valerio <vdv100@gmail.com> and
+is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
+
--- /dev/null
+usr/bin/
+etc/sudoers.d/
+etc/event.d/
+opt/bootscreen/
+opt/bootscreen/media/
+usr/share/applications/hildon/
+usr/share/icons/hicolor/48x48/apps/
+usr/share/icons/hicolor/64x64/apps/
--- /dev/null
+bootscreen_0.1_armel.deb user/system optional
--- /dev/null
+#! /bin/sh
+#
+# bootscreen - postinst
+#
+# Copyright 2010 Valério Valério <vdv100@gmail.com>
+#
+#
+# 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.
+#
+
+
+
+echo "Updating Sudoers"
+update-sudoers || true
+
+exit 0
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+APPNAME := bootscreen
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ -qmake
+ -/opt/qt4-maemo5/bin/qmake-qt4
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+ $(MAKE)
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+ -$(MAKE) clean
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ $(MAKE) DESTDIR=$(CURDIR)/debian/$(APPNAME) install
+
+binary-indep: build install
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installexamples
+ dh_install
+ dh_installmenu
+ dh_installdebconf
+ dh_installlogrotate
+ dh_installemacsen
+ dh_installpam
+ dh_installmime
+# dh_python
+ dh_installinit
+ dh_installcron
+ dh_installinfo
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_perl
+ dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
--- /dev/null
+#include "bootscreen.h"
+#include "bootscreenR.h"
+
+int main(int argc, char *argv[])
+{
+ QString arg = argv[1];
+
+ if (arg == "--random")
+ BootScreenR br;
+ else{
+ QApplication app(argc, argv);
+ BootScreen bs;
+ bs.show();
+ return app.exec();
+ }
+
+}
--- /dev/null
+#!/bin/sh
+
+#
+# bootscreen
+#
+# Copyright 2010 Valério Valério <vdv100@gmail.com>
+#
+#
+# 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.
+#
+
+
+run-standalone.sh /opt/bootscreen/bootscreen