menu->addAction( myActions[SelectAllId] );
menu->addSeparator();
menu->addAction( myActions[DumpCommandsId] );
+ menu->addAction( myActions[SaveLogId] );
Qtx::simplifySeparators( menu );
myActions[ClearId]->setVisible( flags & ClearId );
myActions[SelectAllId]->setVisible( flags & SelectAllId );
myActions[DumpCommandsId]->setVisible( flags & DumpCommandsId );
+ myActions[SaveLogId]->setVisible( flags & SaveLogId );
}
/*!
ret = ret | ( myActions[ClearId]->isVisible() ? ClearId : 0 );
ret = ret | ( myActions[SelectAllId]->isVisible() ? SelectAllId : 0 );
ret = ret | ( myActions[DumpCommandsId]->isVisible() ? DumpCommandsId : 0 );
+ ret = ret | ( myActions[SaveLogId]->isVisible() ? SaveLogId : 0 );
return ret;
}
a->setStatusTip( tr( "EDIT_DUMPCOMMANDS_CMD" ) );
connect( a, SIGNAL( triggered( bool ) ), myEditor, SLOT( dump() ) );
myActions.insert( DumpCommandsId, a );
+
+ a = new QAction( tr( "EDIT_SAVELOG_CMD" ), this );
+ a->setStatusTip( tr( "EDIT_SAVELOG_CMD" ) );
+ connect( a, SIGNAL( triggered( bool ) ), myEditor, SLOT( saveLog() ) );
+ myActions.insert( SaveLogId, a );
}
/*!
//! Context popup menu actions flags
enum
{
- CopyId = 0x01, //!< "Copy" menu action
- PasteId = 0x02, //!< "Paste" menu action
- ClearId = 0x04, //!< "Clear" menu action
- SelectAllId = 0x08, //!< "Select All" menu action
- DumpCommandsId = 0x16, //!< "DumpCommands" menu action
- All = CopyId | PasteId | ClearId | SelectAllId | DumpCommandsId //!< all menu actions
+ CopyId = 0x01, //!< "Copy" menu action
+ PasteId = 0x02, //!< "Paste" menu action
+ ClearId = 0x04, //!< "Clear" menu action
+ SelectAllId = 0x08, //!< "Select All" menu action
+ DumpCommandsId = 0x10, //!< "DumpCommands" menu action
+ SaveLogId = 0x20, //!< "Save log" menu action
+ All = CopyId | PasteId | ClearId | SelectAllId | DumpCommandsId | SaveLogId //!< all menu actions
};
public:
if ( !cmd.endsWith( "\n" ) ) cmd += "\n";
QStringList lines = command.split( "\n" );
for ( int i = 0; i < lines.size(); i++ ) {
- if ( !lines[i].trimmed().isEmpty() )
- myHistory.push_back( lines[i] );
+ if ( !lines[i].trimmed().isEmpty() ) {
+ PyCommand aCommand;
+ aCommand.command = lines[i];
+ myHistory.append( aCommand );
+ }
addText( ( i == 0 ? READY_PROMPT : DOTS_PROMPT ) + lines[i], i != 0 );
}
// IPAL20182
// extend the command buffer with the current command
myCommandBuffer.append( cmd );
// add command to the history
- if ( !cmd.trimmed().isEmpty() )
- myHistory.push_back( cmd );
+ if ( !cmd.trimmed().isEmpty() ) {
+ PyCommand aCommand;
+ aCommand.command = cmd;
+ myHistory.append( aCommand );
+ }
// IPAL19397
addText( "", true );
if ( myCmdInHistory > 0 ) {
myCmdInHistory--;
// get previous command in the history
- QString previousCommand = myHistory.at( myCmdInHistory );
+ QString previousCommand = myHistory.at( myCmdInHistory ).command;
// print previous command
moveCursor( QTextCursor::End );
moveCursor( QTextCursor::StartOfBlock, QTextCursor::KeepAnchor );
QString nextCommand;
if ( myCmdInHistory < myHistory.count() ) {
// next command in history
- nextCommand = myHistory.at( myCmdInHistory );
+ nextCommand = myHistory.at( myCmdInHistory ).command;
}
else {
// end of history is reached
if ( myCmdInHistory > 0 ) {
myCmdInHistory = 0;
// get very first command in the history
- QString firstCommand = myHistory.at( myCmdInHistory );
+ QString firstCommand = myHistory.at( myCmdInHistory ).command;
// print first command
moveCursor( QTextCursor::End );
moveCursor( QTextCursor::StartOfBlock, QTextCursor::KeepAnchor );
{
PrintEvent* pe=(PrintEvent*)event;
addText( pe->text(), false, pe->isError());
+ myHistory.last().output = myHistory.last().output + pe->text();
return;
}
case PyInterp_Event::ES_OK:
QTextStream out (&file);
for( int i=0; i<myHistory.count(); i++ ) {
- out<<myHistory[i]<<endl;
+ out<<myHistory.at(i).command<<endl;
+ }
+ file.close();
+ }
+}
+/*!
+ \brief "Save log" operation.
+ */
+void PyConsole_Editor::saveLog()
+{
+ QStringList aFilters;
+ aFilters.append( tr( "PYTHON_FILES_FILTER" ) );
+
+ QString fileName = SUIT_FileDlg::getFileName( this, QString(),
+ aFilters, tr( "TOT_SAVE_PYLOG" ),
+ false, true, new DumpCommandsFileValidator( this ) );
+ if ( fileName != "" ) {
+ QFile file( fileName );
+ if ( !file.open( QFile::WriteOnly ) )
+ return;
+
+ QTextStream out (&file);
+
+ for( int i = 0; i < myHistory.count(); i++ ) {
+ out << myHistory.at(i).command << endl;
+ out << myHistory.at(i).output;
}
file.close();
}
class PyInterp_Request;
class QEventLoop;
+typedef struct {
+ QString command, output;
+} PyCommand;
+
class PYCONSOLE_EXPORT PyConsole_Editor : public QTextEdit
{
Q_OBJECT;
void handleReturn();
void onPyInterpChanged( PyConsole_Interp* );
void dump();
+ void saveLog();
protected:
virtual void dropEvent( QDropEvent* event );
QString myCurrentCommand; //!< currently being printed command
QString myPrompt; //!< current command line prompt
int myCmdInHistory; //!< current history command index
- QStringList myHistory; //!< commands history buffer
+ QList<PyCommand> myHistory; //!< commands history buffer
QEventLoop* myEventLoop; //!< internal event loop
QString myBanner; //!< current banner
bool myShowBanner; //!< 'show banner' flag
<source>EDIT_DUMPCOMMANDS_CMD</source>
<translation>D&ump commands</translation>
</message>
+ <message>
+ <source>EDIT_SAVELOG_CMD</source>
+ <translation>&Save log</translation>
+ </message>
</context>
<context>
<name>PyConsole_Editor</name>
<source>TOT_DUMP_PYCOMMANDS</source>
<translation>Dump commands</translation>
</message>
+ <message>
+ <source>TOT_SAVE_PYLOG</source>
+ <translation>Save log</translation>
+ </message>
<message>
<source>PYTHON_FILES_FILTER</source>
<translation>PYTHON Files (*.py)</translation>
<source>EDIT_DUMPCOMMANDS_CMD</source>
<translation>&Générer le script des commandes</translation>
</message>
+ <message>
+ <source>EDIT_SAVELOG_CMD</source>
+ <translation type="unfinished">&Save log</translation>
+ </message>
</context>
<context>
<name>PyConsole_Editor</name>
<source>TOT_DUMP_PYCOMMANDS</source>
<translation>&Générer le script des commandes</translation>
</message>
+ <message>
+ <source>TOT_SAVE_PYLOG</source>
+ <translation type="unfinished">Save log</translation>
+ </message>
<message>
<source>PYTHON_FILES_FILTER</source>
<translation>Fichiers PYTHON (*.py)</translation>
<source>EDIT_DUMPCOMMANDS_CMD</source>
<translation>スクリプト コマンドを生成します。(&u)</translation>
</message>
+ <message>
+ <source>EDIT_SAVELOG_CMD</source>
+ <translation type="unfinished">&Save log</translation>
+ </message>
</context>
<context>
<name>PyConsole_Editor</name>
<source>TOT_DUMP_PYCOMMANDS</source>
<translation>スクリプト コマンドを生成します。</translation>
</message>
+ <message>
+ <source>TOT_SAVE_PYLOG</source>
+ <translation type="unfinished">Save log</translation>
+ </message>
<message>
<source>PYTHON_FILES_FILTER</source>
<translation>ファイル (*.py) PYTHON</translation>