2013-11-15 23:42:00 +01:00
/**
* @ author Edouard DUPIN
*
* @ copyright 2010 , Edouard DUPIN , all right reserved
*
* @ license GPL v3 ( see license file )
*/
2013-12-13 21:50:40 +01:00
# include <ewol/context/Context.h>
2013-11-15 23:42:00 +01:00
# include <appl/debug.h>
# include <appl/Gui/WorkerCloseFile.h>
2013-11-17 20:37:06 +01:00
# include <ewol/widget/meta/StdPopUp.h>
2013-11-15 23:42:00 +01:00
# undef __class__
# define __class__ "WorkerCloseFile"
2013-11-17 20:37:06 +01:00
const char * appl : : WorkerCloseFile : : eventCloseDone = " close-file-done " ;
2013-11-15 23:42:00 +01:00
static const char * s_saveAsValidate = " save-as-validate " ;
static const char * s_saveValidate = " save-validate " ;
static const char * s_closeValidate = " close-validate " ;
2013-11-17 20:37:06 +01:00
static const char * s_saveAsDone = " save-as-done " ;
2013-11-15 23:42:00 +01:00
2014-08-07 23:41:48 +02:00
appl : : WorkerCloseFile : : WorkerCloseFile ( ) :
2014-06-05 22:01:24 +02:00
m_buffer ( nullptr ) ,
m_worker ( nullptr ) ,
m_bufferManager ( nullptr ) {
2013-11-20 21:57:00 +01:00
addObjectType ( " appl::WorkerCloseFile " ) ;
2013-11-17 20:37:06 +01:00
addEventId ( eventCloseDone ) ;
2013-11-15 23:42:00 +01:00
// load buffer manager:
2014-08-07 23:41:48 +02:00
m_bufferManager = appl : : BufferManager : : create ( ) ;
}
void appl : : WorkerCloseFile : : init ( const std : : string & _bufferName ) {
ewol : : Object : : init ( ) ;
m_bufferName = _bufferName ;
2014-06-05 22:01:24 +02:00
if ( m_bufferManager = = nullptr ) {
2013-11-15 23:42:00 +01:00
APPL_ERROR ( " can not call unexistant buffer manager ... " ) ;
autoDestroy ( ) ;
return ;
}
2013-11-17 20:37:06 +01:00
if ( m_bufferName = = " " ) {
// need to find the curent file ...
2014-08-07 23:41:48 +02:00
std : : shared_ptr < appl : : Buffer > tmpp = m_bufferManager - > getBufferSelected ( ) ;
2014-06-05 22:01:24 +02:00
if ( tmpp = = nullptr ) {
2013-11-17 20:37:06 +01:00
APPL_ERROR ( " No selected buffer now ... " ) ;
autoDestroy ( ) ;
return ;
}
m_bufferName = tmpp - > getFileName ( ) ;
}
2013-11-15 23:42:00 +01:00
if ( m_bufferManager - > exist ( m_bufferName ) = = false ) {
APPL_ERROR ( " Try to close an non-existant file : " < < m_bufferName ) ;
autoDestroy ( ) ;
return ;
}
2013-11-19 21:43:43 +01:00
m_buffer = m_bufferManager - > get ( m_bufferName ) ;
2014-06-05 22:01:24 +02:00
if ( m_buffer = = nullptr ) {
2013-11-15 23:42:00 +01:00
APPL_ERROR ( " Error to get the buffer : " < < m_bufferName ) ;
autoDestroy ( ) ;
return ;
}
2013-11-19 21:43:43 +01:00
if ( m_buffer - > isModify ( ) = = false ) {
2013-11-17 20:37:06 +01:00
generateEventId ( eventCloseDone ) ;
2014-08-07 23:41:48 +02:00
m_buffer - > destroy ( ) ;
2013-11-15 23:42:00 +01:00
return ;
}
2014-08-07 23:41:48 +02:00
std : : shared_ptr < ewol : : widget : : StdPopUp > tmpPopUp = ewol : : widget : : StdPopUp : : create ( ) ;
2014-06-05 22:01:24 +02:00
if ( tmpPopUp = = nullptr ) {
2013-11-15 23:42:00 +01:00
APPL_ERROR ( " Can not create a simple pop-up " ) ;
return ;
}
tmpPopUp - > setTitle ( " <bold>Close un-saved file:</bold> " ) ;
2013-11-19 21:43:43 +01:00
tmpPopUp - > setComment ( " The file named : <i> \" " + m_buffer - > getFileName ( ) + " \" </i> is curently modify. <br/>If you don't saves these modifications,<br/>they will be definitly lost... " ) ;
2014-08-07 23:41:48 +02:00
std : : shared_ptr < ewol : : Widget > bt = nullptr ;
2013-11-19 21:43:43 +01:00
if ( m_buffer - > hasFileName ( ) = = true ) {
2013-11-15 23:42:00 +01:00
bt = tmpPopUp - > addButton ( " Save " , true ) ;
2014-06-05 22:01:24 +02:00
if ( bt ! = nullptr ) {
2014-08-07 23:41:48 +02:00
bt - > registerOnEvent ( shared_from_this ( ) , " pressed " , s_saveValidate ) ;
2013-11-15 23:42:00 +01:00
}
}
bt = tmpPopUp - > addButton ( " Save As " , true ) ;
2014-06-05 22:01:24 +02:00
if ( bt ! = nullptr ) {
2014-08-07 23:41:48 +02:00
bt - > registerOnEvent ( shared_from_this ( ) , " pressed " , s_saveAsValidate ) ;
2013-11-15 23:42:00 +01:00
}
bt = tmpPopUp - > addButton ( " Close " , true ) ;
2014-06-05 22:01:24 +02:00
if ( bt ! = nullptr ) {
2014-08-07 23:41:48 +02:00
bt - > registerOnEvent ( shared_from_this ( ) , " pressed " , s_closeValidate ) ;
2013-11-15 23:42:00 +01:00
}
tmpPopUp - > addButton ( " Cancel " , true ) ;
tmpPopUp - > setRemoveOnExternClick ( true ) ;
2014-08-07 23:41:48 +02:00
std : : shared_ptr < ewol : : widget : : Windows > tmpWindows = ewol : : getContext ( ) . getWindows ( ) ;
2014-06-05 22:01:24 +02:00
if ( tmpWindows = = nullptr ) {
2013-11-15 23:42:00 +01:00
APPL_ERROR ( " Error to get the windows. " ) ;
autoDestroy ( ) ;
return ;
}
tmpWindows - > popUpWidgetPush ( tmpPopUp ) ;
}
2014-05-15 21:37:39 +02:00
appl : : WorkerCloseFile : : ~ WorkerCloseFile ( ) {
2014-05-20 23:25:58 +02:00
2013-11-15 23:42:00 +01:00
}
2013-12-13 21:50:40 +01:00
void appl : : WorkerCloseFile : : onReceiveMessage ( const ewol : : object : : Message & _msg ) {
2014-06-05 22:01:24 +02:00
if ( m_bufferManager = = nullptr ) {
2013-11-15 23:42:00 +01:00
// nothing to do in this case ==> can do nothing ...
return ;
}
APPL_DEBUG ( " have message : " < < _msg ) ;
if ( _msg . getMessage ( ) = = s_saveAsValidate ) {
2014-08-07 23:41:48 +02:00
m_worker = appl : : WorkerSaveFile : : create ( m_bufferName ) ;
2014-06-05 22:01:24 +02:00
if ( m_worker ! = nullptr ) {
2014-08-07 23:41:48 +02:00
m_worker - > registerOnEvent ( shared_from_this ( ) , appl : : WorkerSaveFile : : eventSaveDone , s_saveAsDone ) ;
2013-11-17 20:37:06 +01:00
}
2013-11-19 21:43:43 +01:00
} else if ( _msg . getMessage ( ) = = s_saveValidate ) {
2014-06-05 22:01:24 +02:00
if ( m_buffer = = nullptr ) {
2013-11-19 21:43:43 +01:00
APPL_ERROR ( " Error to get the buffer : oldName= " < < m_bufferName ) ;
2013-11-17 20:37:06 +01:00
autoDestroy ( ) ;
return ;
}
2013-11-19 21:43:43 +01:00
if ( m_buffer - > storeFile ( ) = = false ) {
2014-08-07 23:41:48 +02:00
std : : shared_ptr < ewol : : widget : : Windows > tmpWindows = ewol : : getContext ( ) . getWindows ( ) ;
2014-06-05 22:01:24 +02:00
if ( tmpWindows = = nullptr ) {
2013-11-17 20:37:06 +01:00
return ;
}
2013-11-19 21:43:43 +01:00
tmpWindows - > displayWarningMessage ( " We can not save the file : <br/><i> " + m_buffer - > getFileName ( ) + " </i> " ) ;
2013-11-17 20:37:06 +01:00
} else {
generateEventId ( eventCloseDone ) ;
}
} else if ( _msg . getMessage ( ) = = s_closeValidate
| | _msg . getMessage ( ) = = s_saveAsDone ) {
2014-06-05 22:01:24 +02:00
if ( m_buffer = = nullptr ) {
2013-11-17 20:37:06 +01:00
APPL_ERROR ( " Error to get the buffer : " < < m_bufferName ) ;
autoDestroy ( ) ;
return ;
}
generateEventId ( eventCloseDone ) ;
2014-08-07 23:41:48 +02:00
m_buffer - > destroy ( ) ;
m_buffer . reset ( ) ;
2013-11-15 23:42:00 +01:00
}
}