Skip to content

Commit

Permalink
Add support of extcmdline
Browse files Browse the repository at this point in the history
FIXME Below description is not accurate anymore

Adds a basic implementation of the external Neovim commandline. Utilizes basic
Qt Widgets (QLineEdit, QTextEdit) to display a floating command prompt.
  • Loading branch information
jgehrig committed Feb 9, 2021
1 parent 8e167e1 commit ccef100
Show file tree
Hide file tree
Showing 16 changed files with 815 additions and 24 deletions.
3 changes: 2 additions & 1 deletion src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ else()
)
endif()

add_subdirectory(cmdline)
add_subdirectory(shellwidget)

include(GNUInstallDirs)
Expand All @@ -50,7 +51,7 @@ add_library(neovim-qt-gui
treeview.cpp
${SRCS_PLATFORM}
${NEOVIM_RCC_SOURCES})
target_link_libraries(neovim-qt-gui ${QTLIBS} qshellwidget neovim-qt)
target_link_libraries(neovim-qt-gui ${QTLIBS} extcmdline qshellwidget neovim-qt)

if(APPLE)
set_property(SOURCE app.cpp PROPERTY COMPILE_DEFINITIONS
Expand Down
22 changes: 22 additions & 0 deletions src/gui/cmdline/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
project(qcommandline)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets REQUIRED)


if (WIN32 AND USE_STATIC_QT)
add_definitions(-DUSE_STATIC_QT)
endif ()

set(SOURCES
blockdisplay.cpp
extcmdlinewidget.cpp
linemodel.cpp
position.cpp
)

add_library(extcmdline STATIC ${SOURCES})
target_link_libraries(extcmdline Qt5::Widgets Qt5::Network)
target_include_directories(extcmdline PUBLIC ../shellwidget)

38 changes: 38 additions & 0 deletions src/gui/cmdline/blockdisplay.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include "blockdisplay.h"

#include <QList>
#include <QDebug>
#include <QStringList>

namespace NeovimQt { namespace Cmdline {

BlockDisplay::BlockDisplay()
{
setVisible(false);
setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
setReadOnly(true);
setFocusPolicy(Qt::NoFocus);
}

QSize BlockDisplay::sizeHint() const
{
QSize parentSizeHint = Super::sizeHint();
int padding = contentsMargins().top() + contentsMargins().bottom();
parentSizeHint.setHeight(document()->size().height() + padding);
return parentSizeHint;
}

int BlockDisplay::GetMaxLineLength() const
{
QStringList allLines = toPlainText().split('\n');

int maxChars = 0;
for (const auto& line : allLines) {
maxChars = qMax(line.size(), maxChars);
}

return maxChars;
}

} } // namespace NeovimQt::Cmdline
17 changes: 17 additions & 0 deletions src/gui/cmdline/blockdisplay.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <QTextEdit>

namespace NeovimQt { namespace Cmdline {

class BlockDisplay : public QTextEdit {
using Super = QTextEdit;

public:
BlockDisplay();

virtual QSize sizeHint() const override;
virtual int GetMaxLineLength() const;
};

} } // namespace NeovimQt::Cmdline
Loading

0 comments on commit ccef100

Please sign in to comment.