Settings default filename is now "config.ini"

On Mac OS X and ubuntu, configuration file is saved in ~/.find_object
Added Mac OS X packaging (DragNDrop)

git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@16 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
matlabbe 2011-11-09 20:48:04 +00:00
parent a600190f80
commit ca47c87b67
7 changed files with 121 additions and 19 deletions

View File

@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 2.8.2)
PROJECT( FindObject )
SET(PROJECT_PREFIX find_object)
ADD_DEFINITIONS(-DPROJECT_NAME="${PROJECT_NAME}")
ADD_DEFINITIONS(-DPROJECT_PREFIX="${PROJECT_PREFIX}")
#######################
# VERSION
@ -37,6 +37,24 @@ SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
FIND_PACKAGE(OpenCV REQUIRED) # tested on 2.3.1
FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui) # tested on Qt4.7
####### OSX BUNDLE CMAKE_INSTALL_PREFIX #######
OPTION(BUILD_AS_BUNDLE "Set to ON to build as bundle (DragNDrop)" OFF)
IF(APPLE AND BUILD_AS_BUNDLE)
#Force to Off, easiest to package into the bundle
SET( BUILD_SHARED_LIBS OFF )
# Required when packaging, and set CMAKE_INSTALL_PREFIX to "/".
SET(CPACK_SET_DESTDIR TRUE)
SET(CMAKE_BUNDLE_NAME
"${PROJECT_NAME}")
SET(CMAKE_BUNDLE_LOCATION "/")
# make sure CMAKE_INSTALL_PREFIX ends in /
SET(CMAKE_INSTALL_PREFIX
"/${CMAKE_BUNDLE_NAME}.app/Contents")
ENDIF(APPLE AND BUILD_AS_BUNDLE)
####### SOURCES (Projects) #######
ADD_SUBDIRECTORY( src )
@ -81,12 +99,31 @@ IF(WIN32)
#SET(CPACK_NSIS_INSTALLED_ICON_NAME bin\\\\${PROJECT_NAME}.exe)
SET(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PROJECT_NAME}" ${CPACK_PACKAGE_EXECUTABLES})
SET(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}" ${CPACK_CREATE_DESKTOP_LINKS})
ENDIF(WIN32)
ELSEIF(APPLE)
IF(BUILD_AS_BUNDLE)
# On APPLE and if BUILD_AS_BUNDLE=ON, the project is created as a bundle
# over the main app (see ./src).Here we package only this bundle. Note
# that we set CMAKE_INSTALL_PREFIX to "/" when packaging to DragNDrop...
SET(CPACK_GENERATOR "DragNDrop")
ELSE()
SET(CPACK_GENERATOR "PackageMaker;TBZ2")
ENDIF()
SET(CPACK_SOURCE_GENERATOR "TBZ2")
#SET(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/app/src/${PROJECT_NAME}.icns")
ENDIF()
INCLUDE(CPack)
#######################
# OUTPUT INFO
#######################
MESSAGE(STATUS "--------------------------------------------")
MESSAGE(STATUS "Info :")
MESSAGE(STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
MESSAGE(STATUS " CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
IF(APPLE)
MESSAGE(STATUS " BUILD_AS_BUNDLE = ${BUILD_AS_BUNDLE}")
ENDIF(APPLE)
MESSAGE(STATUS "--------------------------------------------")

29
README
View File

@ -1,13 +1,38 @@
+---------------------------------------------------
+ Build from source
+---------------------------------------------------
Requirements :
-Cmake (tested on 2.8.2)
-Qt4 (tested on 4.7)
-OpenCV (tested on 2.3.1)
-MinGW (only on Windows)
Build from source:
Ubuntu / Mac OS X
$ cd find_object/build
$ cmake ..
$ make
$ cd ../bin
$ ./find_object
(enjoy!)
Windows
$ cd find_object/build
$ cmake -G"MinGW Makefiles" ..
$ make
$ cd ../bin
$ find_object
+---------------------------------------------------
+ Packaging
+---------------------------------------------------
MacOSX (DragNDrop) :
> cd build
> cmake -DBUILD_AS_BUNDLE=ON ..
> make -j4
> make package
Windows :
> cd build
> cmake -G"MinGW Makefiles" ..
> make -j4
> make package

View File

@ -29,8 +29,6 @@ QT4_WRAP_CPP(moc_srcs ${headers_ui})
### Qt Gui stuff end###
SET(SRC_FILES
./MainWindow.cpp
./AddObjectDialog.cpp
@ -63,15 +61,24 @@ SET(LIBRARIES
INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
# create an executable file
ADD_EXECUTABLE(find_object WIN32 ${SRC_FILES})
IF(APPLE AND BUILD_AS_BUNDLE)
ADD_EXECUTABLE(find_object MACOSX_BUNDLE ${SRC_FILES})
ELSE()
ADD_EXECUTABLE(find_object WIN32 ${SRC_FILES})
ENDIF()
# Linking with Qt libraries
TARGET_LINK_LIBRARIES(find_object ${LIBRARIES})
IF(WIN32)
IF(APPLE AND BUILD_AS_BUNDLE)
SET_TARGET_PROPERTIES(find_object PROPERTIES
OUTPUT_NAME ${CMAKE_BUNDLE_NAME})
ELSEIF(WIN32)
SET_TARGET_PROPERTIES(find_object PROPERTIES
OUTPUT_NAME ${PROJECT_NAME})
ENDIF(WIN32)
ELSE()
SET_TARGET_PROPERTIES(find_object PROPERTIES
OUTPUT_NAME ${PROJECT_PREFIX})
ENDIF()
#---------------------------
# Installation stuff
@ -79,12 +86,25 @@ ENDIF(WIN32)
INSTALL(TARGETS find_object
RUNTIME DESTINATION bin COMPONENT runtime
BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}" COMPONENT runtime)
#---------------------------
# Dependencies packaging
#---------------------------
IF(APPLE AND BUILD_AS_BUNDLE)
INSTALL(CODE "execute_process(COMMAND ln -s \"../MacOS/${CMAKE_BUNDLE_NAME}\" ${PROJECT_NAME}
WORKING_DIRECTORY \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin)")
ENDIF(APPLE AND BUILD_AS_BUNDLE)
SET(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
IF(WIN32)
IF((APPLE AND BUILD_AS_BUNDLE) OR WIN32)
SET(plugin_dest_dir bin)
SET(qtconf_dest_dir bin)
IF(APPLE)
SET(plugin_dest_dir MacOS)
SET(qtconf_dest_dir Resources)
SET(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/MacOS/${CMAKE_BUNDLE_NAME}")
ENDIF(APPLE)
# Install needed Qt plugins by copying directories from the qt installation
# One can cull what gets copied by using 'REGEX "..." EXCLUDE'
# Exclude debug libraries
@ -97,6 +117,9 @@ IF(WIN32)
# install a qt.conf file
# this inserts some cmake code into the install script to write the file
SET(QT_CONF_FILE [Paths]\nPlugins=plugins)
IF(APPLE)
SET(QT_CONF_FILE [Paths]\nPlugins=MacOS/plugins)
ENDIF(APPLE)
INSTALL(CODE "
file(WRITE \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"${QT_CONF_FILE}\")
" COMPONENT runtime)
@ -115,5 +138,5 @@ IF(WIN32)
include(\"BundleUtilities\")
fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\")
" COMPONENT runtime)
ENDIF(WIN32)
ENDIF((APPLE AND BUILD_AS_BUNDLE) OR WIN32)

View File

@ -32,7 +32,12 @@ MainWindow::MainWindow(QWidget * parent) :
connect(&cameraTimer_, SIGNAL(timeout()), this, SLOT(update()));
QByteArray geometry;
#ifdef WIN32
//TODO Maybe use the Documents and Settings
Settings::loadSettings(Settings::iniDefaultFileName, &geometry);
#else
Settings::loadSettings(QString("%1/.%2/%3").arg(QDir::homePath()).arg(PROJECT_PREFIX).arg(Settings::iniDefaultFileName), &geometry);
#endif
this->restoreGeometry(geometry);
ui_->toolBox->setupUi();
@ -73,13 +78,18 @@ MainWindow::~MainWindow()
void MainWindow::closeEvent(QCloseEvent * event)
{
#ifdef WIN32
//TODO Maybe use the Documents and Settings
Settings::saveSettings(Settings::iniDefaultFileName, this->saveGeometry());
#else
Settings::saveSettings(QString("%1/.%2/%3").arg(QDir::homePath()).arg(PROJECT_PREFIX).arg(Settings::iniDefaultFileName), this->saveGeometry());
#endif
QMainWindow::closeEvent(event);
}
void MainWindow::loadObjects()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Load objects..."), "", "*.obj");
QString fileName = QFileDialog::getOpenFileName(this, tr("Load objects..."), QDir::homePath(), "*.obj");
if(!fileName.isEmpty())
{
QFile file(fileName);
@ -113,7 +123,7 @@ void MainWindow::loadObjects()
}
void MainWindow::saveObjects()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save objects..."), Settings::currentDetectorType()+Settings::currentDescriptorType()+QString("%1.obj").arg(objects_.size()), "*.obj");
QString fileName = QFileDialog::getSaveFileName(this, tr("Save objects..."), (QDir::homePath() + "/") +Settings::currentDetectorType()+Settings::currentDescriptorType()+QString("%1.obj").arg(objects_.size()), "*.obj");
if(!fileName.isEmpty())
{
if(!fileName.endsWith(".obj"))

View File

@ -381,10 +381,17 @@ void Object::contextMenuEvent(QContextMenuEvent * event)
if(action == _saveImage)
{
QString text;
if(_savedFileName.isEmpty())
{
#ifndef WIN32
_savedFileName = QDir::homePath();
#endif
_savedFileName+="/figure.png";
}
text = QFileDialog::getSaveFileName(this, tr("Save figure to ..."), _savedFileName, "*.png *.xpm *.jpg *.pdf");
if(!text.isEmpty())
{
if(!text.endsWith(".png") && !text.endsWith(".png") && !text.endsWith(".png") && !text.endsWith(".png"))
if(!text.endsWith(".png") && !text.endsWith(".xpm") && !text.endsWith(".jpg") && !text.endsWith(".pdf"))
{
text.append(".png");//default
}

View File

@ -16,7 +16,7 @@ ParametersMap Settings::defaultParameters_;
ParametersMap Settings::parameters_;
ParametersType Settings::parametersType_;
Settings Settings::dummyInit_;
const char * Settings::iniDefaultFileName = "./" PROJECT_NAME ".ini";
const char * Settings::iniDefaultFileName = "config.ini";
void Settings::loadSettings(const QString & fileName, QByteArray * windowGeometry)
{

View File

@ -116,7 +116,7 @@ class Settings
public:
virtual ~Settings(){}
static const char * iniDefaultFileName; // "./" PROJECT_NAME ".ini"
static const char * iniDefaultFileName; // "config.ini"
static void loadSettings(const QString & fileName = iniDefaultFileName, QByteArray * windowGeometry = 0);
static void saveSettings(const QString & fileName = iniDefaultFileName, const QByteArray & windowGeometry = QByteArray());