Add tabbar

pull/4/head
reionwong 5 years ago
parent ea547b1c36
commit 097b158f38

@ -2,6 +2,7 @@ import QtQuick 2.15
import QtQml 2.15 import QtQml 2.15
import QtQuick.Window 2.15 import QtQuick.Window 2.15
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import FishUI 1.0 as FishUI import FishUI 1.0 as FishUI
import Cutefish.TextEditor 1.0 import Cutefish.TextEditor 1.0
@ -9,9 +10,12 @@ Item {
id: control id: control
property alias fileUrl: document.fileUrl property alias fileUrl: document.fileUrl
property alias fileName: document.fileName
property bool showLineNumbers: true property bool showLineNumbers: true
height: ListView.view.height
width: ListView.view.width
DocumentHandler { DocumentHandler {
id: document id: document
document: body.textDocument document: body.textDocument
@ -34,8 +38,11 @@ Item {
Keys.enabled: true Keys.enabled: true
Keys.forwardTo: body Keys.forwardTo: body
contentWidth: availableWidth
Flickable { Flickable {
id: _flickable id: _flickable
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
boundsMovement: Flickable.StopAtBounds boundsMovement: Flickable.StopAtBounds
@ -130,12 +137,12 @@ Item {
id: _delegate id: _delegate
readonly property int line : index readonly property int line : index
property bool foldable : control.document.isFoldable(line) // property bool foldable : control.document.isFoldable(line)
width: ListView.view.width width: ListView.view.width
height: Math.max(fontSize, document.lineHeight(line)) height: Math.max(fontSize, document.lineHeight(line))
readonly property real fontSize: control.body.font.pointSize readonly property real fontSize: 11//control.body.font.pointSize
readonly property bool isCurrentItem: ListView.isCurrentItem readonly property bool isCurrentItem: ListView.isCurrentItem
// Connections { // Connections {

@ -1,15 +1,127 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Window 2.15 import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import FishUI 1.0 as FishUI import FishUI 1.0 as FishUI
FishUI.Window { FishUI.Window {
width: 640 width: 640
height: 480 height: 480
visible: true visible: true
title: qsTr("Hello World") title: qsTr("Text Editor")
TextEditor { headerItem: Item {
TabBar {
anchors.fill: parent
currentIndex : _container.currentIndex
Repeater {
id: _repeater
model: _container.count
TabButton {
text: _container.contentModel.get(index).fileName
implicitHeight: parent.height
implicitWidth: Math.max(parent.width / _repeater.count, 200)
ToolTip.delay: 1000
ToolTip.timeout: 5000
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: _container.contentModel.get(index).fileUrl
leftPadding: FishUI.Units.smallSpacing
rightPadding: FishUI.Units.smallSpacing
onClicked: {
_container.currentIndex = index
_container.currentItem.forceActiveFocus()
}
}
}
}
}
ColumnLayout {
anchors.fill: parent
spacing: 0
Container {
id: _container
Layout.fillWidth: true
Layout.fillHeight: true
contentItem: ColumnLayout {
spacing: 0
ListView {
id: _view
Layout.fillWidth: true
Layout.fillHeight: true
interactive: false
orientation: ListView.Horizontal
snapMode: ListView.SnapOneItem
currentIndex: _container.currentIndex
model: _container.contentModel
boundsBehavior: Flickable.StopAtBounds
boundsMovement :Flickable.StopAtBounds
spacing: 0
preferredHighlightBegin: 0
preferredHighlightEnd: width
highlightRangeMode: ListView.StrictlyEnforceRange
highlightMoveDuration: 0
highlightFollowsCurrentItem: true
highlightResizeDuration: 0
highlightMoveVelocity: -1
highlightResizeVelocity: -1
maximumFlickVelocity: 4 * width
cacheBuffer: _view.count * width
keyNavigationEnabled : false
keyNavigationWraps : false
}
}
}
Item {
Layout.fillWidth: true
Layout.preferredHeight: 20
ColumnLayout {
anchors.fill: parent anchors.fill: parent
}
}
}
function addTab() {
const component = textEditorCompeont
const object = component.createObject(_container.contentModel)
_container.addItem(object)
_container.currentIndex = Math.max(_container.count - 1, 0)
object.forceActiveFocus()
}
Component {
id: textEditorCompeont
TextEditor {
fileUrl: "file:///home/reion/Cutefish/core/notificationd/view.cpp" fileUrl: "file:///home/reion/Cutefish/core/notificationd/view.cpp"
} }
} }
Component.onCompleted: {
addTab()
addTab()
addTab()
}
}

@ -713,6 +713,10 @@ void DocumentHandler::setFileUrl(const QUrl &url)
m_fileUrl = url; m_fileUrl = url;
QFileInfo info(m_fileUrl.toLocalFile());
m_fileName = info.fileName();
emit fileNameChanged();
load(m_fileUrl); load(m_fileUrl);
emit fileUrlChanged(); emit fileUrlChanged();
@ -1135,6 +1139,11 @@ void DocumentHandler::setEnableSyntaxHighlighting(const bool &value)
emit enableSyntaxHighlightingChanged(); emit enableSyntaxHighlightingChanged();
} }
QString DocumentHandler::fileName()
{
return m_fileName;
}
bool DocumentHandler::enableSyntaxHighlighting() const bool DocumentHandler::enableSyntaxHighlighting() const
{ {
return m_enableSyntaxHighlighting; return m_enableSyntaxHighlighting;

@ -288,6 +288,8 @@ class DocumentHandler : public QObject
Q_PROPERTY(bool findCaseSensitively MEMBER m_findCaseSensitively NOTIFY findCaseSensitivelyChanged) Q_PROPERTY(bool findCaseSensitively MEMBER m_findCaseSensitively NOTIFY findCaseSensitivelyChanged)
Q_PROPERTY(QString fileName MEMBER m_fileName NOTIFY fileNameChanged)
public: public:
explicit DocumentHandler(QObject *parent = nullptr); explicit DocumentHandler(QObject *parent = nullptr);
~DocumentHandler(); ~DocumentHandler();
@ -597,6 +599,8 @@ public:
return (darkness > 0.5); return (darkness > 0.5);
} }
QString fileName();
public slots: public slots:
/** /**
* @brief load * @brief load
@ -711,6 +715,8 @@ signals:
void findWholeWordsChanged(); void findWholeWordsChanged();
// void cursorYPosChanged(); // void cursorYPosChanged();
void fileNameChanged();
private: private:
void reset(); void reset();
void setStyle(); void setStyle();
@ -766,6 +772,8 @@ private:
QTimer m_autoSaveTimer; QTimer m_autoSaveTimer;
QString m_fileName;
void refreshAllBlocks(); void refreshAllBlocks();
}; };

Loading…
Cancel
Save