Skip to content

Commit 40828e8

Browse files
committedAug 26, 2015
[GRASS] addapted to the new qtermwidget
1 parent 61a1121 commit 40828e8

File tree

7 files changed

+76
-23
lines changed

7 files changed

+76
-23
lines changed
 

‎src/plugins/grass/CMakeLists.txt

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ ADD_SUBDIRECTORY(modules)
22
ADD_SUBDIRECTORY(scripts)
33

44
#ADD_DEFINITIONS(-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\")
5-
ADD_DEFINITIONS(-DHAVE_OPENPTY=${HAVE_OPENPTY})
5+
if (HAVE_OPENPTY)
6+
ADD_DEFINITIONS(-DHAVE_OPENPTY)
7+
ENDIF (HAVE_OPENPTY)
68
ADD_DEFINITIONS("-DGRASS_EXPORT=${DLLIMPORT} -DGRASS_LIB_EXPORT=${DLLIMPORT}")
79

810
IF (WIN32)
@@ -66,36 +68,50 @@ IF(NOT WIN32)
6668
SET (GRASS_PLUGIN_SRCS ${GRASS_PLUGIN_SRCS}
6769
${CMAKE_CURRENT_SOURCE_DIR}/qgsgrassshell.cpp
6870
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/BlockArray.cpp
71+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/ColorScheme.cpp
6972
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Emulation.cpp
7073
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Filter.cpp
7174
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/History.cpp
75+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/HistorySearch.cpp
7276
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/KeyboardTranslator.cpp
7377
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Pty.cpp
78+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/SearchBar.cpp
7479
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Screen.cpp
7580
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/ScreenWindow.cpp
7681
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Session.cpp
7782
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/ShellCommand.cpp
7883
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/TerminalCharacterDecoder.cpp
7984
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/TerminalDisplay.cpp
8085
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Vt102Emulation.cpp
81-
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3process.cpp
82-
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3processcontroller.cpp
86+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kprocess.cpp
87+
# ${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3processcontroller.cpp
8388
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/konsole_wcwidth.cpp
8489
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kpty.cpp
90+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kptydevice.cpp
91+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kptyprocess.cpp
8592
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/qtermwidget.cpp
93+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/tools.cpp
94+
)
95+
96+
SET (GRASS_PLUGIN_UIS ${GRASS_PLUGIN_UIS}
97+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/SearchBar.ui
8698
)
8799

88100
SET (GRASS_PLUGIN_MOC_HDRS ${GRASS_PLUGIN_MOC_HDRS}
89101
${CMAKE_CURRENT_SOURCE_DIR}/qgsgrassshell.h
90102
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Emulation.h
91103
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Filter.h
104+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/HistorySearch.h
92105
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Pty.h
93106
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/ScreenWindow.h
107+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/SearchBar.h
94108
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Session.h
95109
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/TerminalDisplay.h
96110
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/Vt102Emulation.h
97-
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3process.h
98-
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3processcontroller.h
111+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kprocess.h
112+
# ${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/k3processcontroller.h
113+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kptydevice.h
114+
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/kptyprocess.h
99115
${CMAKE_CURRENT_SOURCE_DIR}/qtermwidget/qtermwidget.h
100116
)
101117

@@ -109,6 +125,13 @@ IF(NOT WIN32)
109125
PROPERTIES COMPILE_FLAGS "-Wno-overloaded-virtual -Wno-mismatched-tags"
110126
)
111127
ENDIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
128+
129+
SET(KB_LAYOUT_DIR "${QGIS_DATA_DIR}/grass/qtermwidget/kb-layouts")
130+
ADD_DEFINITIONS(-DKB_LAYOUT_DIR=\\\"${CMAKE_INSTALL_PREFIX}/${KB_LAYOUT_DIR}\\\")
131+
132+
SET(COLORSCHEMES_DIR "${QGIS_DATA_DIR}/grass/qtermwidget/color-schemes")
133+
ADD_DEFINITIONS(-DCOLORSCHEMES_DIR=\\\"${CMAKE_INSTALL_PREFIX}/${COLORSCHEMES_DIR}\\\")
134+
112135
ENDIF(NOT WIN32)
113136

114137
SET (GRASS_PLUGIN_RCCS ${CMAKE_CURRENT_SOURCE_DIR}/qgsgrass_plugin.qrc)
@@ -200,6 +223,13 @@ INSTALL (FILES ${GMLS}
200223
INSTALL (FILES themes/default/grass_arrow.svg themes/default/grass_plus.svg themes/default/grass_arrow.png themes/default/grass_plus.png
201224
DESTINATION ${QGIS_DATA_DIR}/grass/modules)
202225

226+
IF(NOT WIN32)
227+
INSTALL(DIRECTORY qtermwidget/kb-layouts/ DESTINATION "${KB_LAYOUT_DIR}" FILES_MATCHING PATTERN "*.keytab" )
228+
INSTALL(DIRECTORY qtermwidget/kb-layouts/ DESTINATION "${KB_LAYOUT_DIR}" )
229+
message(STATUS "Keyboard layouts will be installed in: ${KB_LAYOUT_DIR}")
230+
INSTALL(DIRECTORY qtermwidget/color-schemes/ DESTINATION "${COLORSCHEMES_DIR}" FILES_MATCHING PATTERN "*.*schem*")
231+
ENDIF(NOT WIN32)
232+
203233
FOREACH(GRASS_BUILD_VERSION 6 7) # GRASS 6 and GRASS 7
204234
IF(GRASS_FOUND${GRASS_BUILD_VERSION})
205235
ADD_SUBDIRECTORY(${GRASS_BUILD_VERSION})

‎src/plugins/grass/qgsgrassmodule.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ QProcessEnvironment QgsGrassModule::processEnvironment( bool direct )
157157
QStringList paths = QgsGrass::grassModulesPaths();
158158
paths += environment.value( "PATH" ).split( QgsGrass::pathSeparator() );
159159
environment.insert( "PATH", paths.join( QgsGrass::pathSeparator() ) );
160+
environment.insert( "PYTHONPATH", QgsGrass::getPythonPath() );
160161

161162
if ( direct )
162163
{

‎src/plugins/grass/qgsgrassmoduleoptions.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,9 +1005,10 @@ QDomDocument QgsGrassModuleStandardOptions::readInterfaceDescription( const QStr
10051005
QString pathVariable = QgsGrassModule::libraryPathVariable();
10061006
QgsDebugMsg( "process.exitCode() = " + QString::number( process.exitCode() ) );
10071007
QString msg = tr( "Cannot start module %1" ).arg( mXName )
1008-
+ "<br>" + pathVariable + "=" + environment.value( pathVariable )
1009-
+ "<br>PATH=" + getenv( "PATH" )
1010-
+ "<br>" + tr( "command" ) + QString( ": %1 %2<br>%3<br>%4" )
1008+
+ "<br><br>" + pathVariable + "=" + environment.value( pathVariable )
1009+
+ "<br><br>PATH=" + environment.value( "PATH" )
1010+
+ "<br><br>PYTHONPATH=" + environment.value( "PYTHONPATH" )
1011+
+ "<br><br>" + tr( "command" ) + QString( ": %1 %2<br>%3<br>%4" )
10111012
.arg( cmd ).arg( arguments.join( " " ) )
10121013
.arg( process.readAllStandardOutput().constData() )
10131014
.arg( process.readAllStandardError().constData() );

‎src/plugins/grass/qgsgrassshell.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ QgsGrassShell::QgsGrassShell( QgsGrassTools *tools, QTabWidget *parent, const ch
3939
{
4040
Q_UNUSED( name );
4141
QVBoxLayout *mainLayout = new QVBoxLayout( this );
42-
QTermWidget *mTerminal = new QTermWidget( 0, this );
42+
mTerminal = new QTermWidget( 0, this );
4343
initTerminal( mTerminal );
4444
QShortcut *pasteShortcut = new QShortcut( QKeySequence( tr( "Ctrl+Shift+V" ) ), mTerminal );
4545
QShortcut *copyShortcut = new QShortcut( QKeySequence( tr( "Ctrl+Shift+C" ) ), mTerminal );
@@ -63,13 +63,20 @@ QgsGrassShell::QgsGrassShell( QgsGrassTools *tools, QTabWidget *parent, const ch
6363
#endif
6464

6565
mTerminal->setSize( 80, 25 );
66-
mTerminal->setColorScheme( COLOR_SCHEME_BLACK_ON_WHITE );
66+
//mTerminal->setColorScheme( COLOR_SCHEME_BLACK_ON_WHITE );
67+
mTerminal->setColorScheme( QgsApplication::pkgDataPath() + "/grass/qtermwidget/color-schemes/BlackOnWhite.schema" );
6768
mTerminal->startShellProgram();
6869
mTerminal->setFocus( Qt::MouseFocusReason );
70+
71+
// QTermWidget does set default font family Monospace, size 10 via QWidget::setFont()
72+
// but QWidget::setFont() does not guarantee to really change the font (see doc)
73+
// setStyleSheet() works (it is applied to QTermWidget children TerminalDisplay)
74+
mTerminal->setStyleSheet( "font-family: Monospace; font-size: 10pt;" );
6975
}
7076

7177
QgsGrassShell::~QgsGrassShell()
7278
{
79+
QgsDebugMsg( "entered" );
7380
}
7481

7582
void QgsGrassShell::closeShell()
@@ -98,6 +105,13 @@ void QgsGrassShell::initTerminal( QTermWidget *terminal )
98105
//QString shellProgram = QString( "%1/etc/Init.sh" ).arg( ::getenv( "GISBASE" ) );
99106

100107
//terminal->setShellProgram( shellProgram );
108+
109+
QString path = getenv( "PATH" );
110+
path += QgsGrass::pathSeparator() + QgsGrass::grassModulesPaths().join( QgsGrass::pathSeparator() );
111+
QgsDebugMsg( "path = " + path );
112+
113+
env << "PATH=" + path;
114+
env << "PYTHONPATH=" + QgsGrass::getPythonPath();
101115
env << "TERM=vt100";
102116
env << "GISRC_MODE_MEMORY";
103117
// TODO: we should check if these environment variable were set by user before QGIS was started

‎src/plugins/grass/qgsgrasstools.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ void QgsGrassTools::runModule( QString name, bool direct )
258258
return; // Section
259259
}
260260

261-
#if defined(HAVE_OPENPTY) && !defined(Q_OS_WIN)
261+
#ifdef HAVE_POSIX_OPENPT
262262
QgsGrassShell* sh = 0;
263263
#endif
264264

@@ -274,14 +274,14 @@ void QgsGrassTools::runModule( QString name, bool direct )
274274
return;
275275
#else
276276

277-
#ifdef HAVE_OPENPTY
277+
#ifdef HAVE_POSIX_OPENPT
278278
sh = new QgsGrassShell( this, mTabWidget );
279279
m = qobject_cast<QWidget *>( sh );
280280
#else
281281
QMessageBox::warning( 0, tr( "Warning" ), tr( "GRASS Shell is not compiled." ) );
282-
#endif // HAVE_OPENPTY
282+
#endif
283283

284-
#endif // ! Q_OS_WIN
284+
#endif // Q_OS_WIN
285285
}
286286
else
287287
{
@@ -319,9 +319,11 @@ void QgsGrassTools::runModule( QString name, bool direct )
319319
/* TODO: Implement something that resizes the terminal without
320320
* crashes.
321321
*/
322-
#ifdef HAVE_OPENPTY
322+
#ifdef HAVE_POSIX_OPENPT
323323
if ( sh )
324+
{
324325
sh->resizeTerminal();
326+
}
325327
#endif
326328
#endif
327329
}

‎src/providers/grass/qgsgrass.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,14 +450,7 @@ void QgsGrass::init( void )
450450
QgsDebugMsg( "mGrassModulesPaths = " + mGrassModulesPaths.join( "," ) );
451451
//putEnv( "PATH", path );
452452

453-
// TODO: move setting of PYTHONPATH to QProcess where necessary
454-
// Set PYTHONPATH
455-
QString pythonpath = gisbase() + "/etc/python";
456-
QString pp = getenv( "PYTHONPATH" );
457-
pythonpath.append( pathSeparator() + pp );
458-
QgsDebugMsg( QString( "set PYTHONPATH: %1" ).arg( pythonpath ) );
459-
putEnv( "PYTHONPATH", pythonpath );
460-
453+
// TODO: move where it is required for QProcess
461454
// Set GRASS_PAGER if not set, it is necessary for some
462455
// modules printing to terminal, e.g. g.list
463456
// We use 'cat' because 'more' is not present in MSYS (Win)
@@ -2355,6 +2348,15 @@ void QgsGrass::putEnv( QString name, QString value )
23552348
putenv( envChar );
23562349
}
23572350

2351+
QString QgsGrass::getPythonPath()
2352+
{
2353+
QString pythonpath = getenv( "PYTHONPATH" );
2354+
pythonpath += pathSeparator() + gisbase() + "/etc/python";
2355+
pythonpath += pathSeparator() + gisbase() + "/gui/wxpython";
2356+
QgsDebugMsg( "pythonpath = " + pythonpath );
2357+
return pythonpath;
2358+
}
2359+
23582360
QString QgsGrass::modulesConfigDefaultDirPath()
23592361
{
23602362
if ( QgsApplication::isRunningFromBuildDir() )

‎src/providers/grass/qgsgrass.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,9 @@ class GRASS_LIB_EXPORT QgsGrass : public QObject
474474
return QgsApplication::libexecPath() + "grass/modules";
475475
}
476476

477+
// Get PYTHONPATH with paths to GRASS Python modules
478+
static QString getPythonPath();
479+
477480
// path to default modules interface config dir
478481
static QString modulesConfigDefaultDirPath();
479482

0 commit comments

Comments
 (0)
Failed to load comments.