Skip to content

Commit 164fe84

Browse files
committed
wip
1 parent d862107 commit 164fe84

17 files changed

+483
-7
lines changed

CMakeLists.txt

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,59 @@
1-
cmake_minimum_required(VERSION 3.17)
1+
cmake_minimum_required(VERSION 3.16)
22

3-
project(JetBrainsDockingSystem LANGUAGES CXX)
3+
project(JetBrainsDockingSystem VERSION 0.0.1.1 LANGUAGES CXX)
4+
5+
# ----------------------------------
6+
# Build Options
7+
# ----------------------------------
8+
option(JBDS_BUILD_STATIC "Build static library" off)
9+
option(JBDS_INSTALL "Install library" on)
10+
option(JBDS_BUILD_TESTS "Build test cases" ON)
11+
12+
# ----------------------------------
13+
# CMake Settings
14+
# ----------------------------------
15+
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
16+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
17+
endif()
18+
19+
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
20+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
21+
endif()
22+
23+
if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
24+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
25+
endif()
26+
27+
if(MSVC)
28+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /manifest:no")
29+
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /manifest:no")
30+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /manifest:no")
31+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
32+
33+
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
34+
set(CMAKE_DEBUG_POSTFIX "d")
35+
endif()
36+
elseif(MINGW)
37+
set(CMAKE_STATIC_LIBRARY_PREFIX "")
38+
set(CMAKE_SHARED_LIBRARY_PREFIX "")
39+
endif()
40+
41+
if(JBDS_INSTALL)
42+
include(GNUInstallDirs)
43+
include(CMakePackageConfigHelpers)
44+
endif()
45+
46+
# ----------------------------------
47+
# Project Variables
48+
# ----------------------------------
49+
set(JBDS_VERSION ${PROJECT_VERSION})
50+
set(JBDS_INSTALL_NAME ${PROJECT_NAME})
51+
52+
# ----------------------------------
53+
# Add source modules
54+
# ----------------------------------
55+
add_subdirectory(src)
56+
57+
if(JBDS_BUILD_TESTS)
58+
add_subdirectory(tests)
59+
endif()

README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,4 @@ JetBrains IDE classic docking system reimplemented by Qt.
55
## Requirements
66

77
+ Qt
8-
+ C++17
9-
10-
## Dependencies
11-
12-
+ qtmediate
8+
+ C++17

cmake/winrc.cmake

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
set(_rc_content "#include <windows.h>
2+
3+
#ifndef VS_VERSION_INFO
4+
#define VS_VERSION_INFO 1
5+
#endif
6+
7+
#define _STRINGIFY(x) #x
8+
#define STRINGIFY(x) _STRINGIFY(x)
9+
10+
VS_VERSION_INFO VERSIONINFO
11+
FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK}
12+
PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK}
13+
{
14+
BLOCK \"StringFileInfo\"
15+
{
16+
// U.S. English - Windows, Multilingual
17+
BLOCK \"040904E4\"
18+
{
19+
VALUE \"FileDescription\", STRINGIFY(${RC_DESCRIPTION})
20+
VALUE \"FileVersion\", STRINGIFY(${PROJECT_VERSION})
21+
VALUE \"ProductName\", STRINGIFY(${PROJECT_NAME})
22+
VALUE \"ProductVersion\", STRINGIFY(${PROJECT_VERSION})
23+
VALUE \"LegalCopyright\", STRINGIFY(${RC_COPYRIGHT})
24+
}
25+
}
26+
BLOCK \"VarFileInfo\"
27+
{
28+
VALUE \"Translation\", 0x409, 1252 // 1252 = 0x04E4
29+
}
30+
}")
31+
32+
set(_rc_file ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_res.rc)
33+
file(WRITE ${_rc_file} ${_rc_content})
34+
target_sources(${PROJECT_NAME} PRIVATE ${_rc_file})

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_subdirectory(JetBrainsDockingSystem)
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
set(CMAKE_AUTOMOC on)
2+
set(CMAKE_AUTORCC on)
3+
set(CMAKE_AUTOUIC on)
4+
5+
if(JBDS_BUILD_STATIC)
6+
add_library(${PROJECT_NAME} STATIC)
7+
target_compile_definitions(${PROJECT_NAME} PUBLIC JBDS_STATIC)
8+
else()
9+
add_library(${PROJECT_NAME} SHARED)
10+
endif()
11+
12+
target_compile_definitions(${PROJECT_NAME} PRIVATE JBDS_LIBRARY)
13+
14+
# add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
15+
file(GLOB_RECURSE _src *.h *.cpp)
16+
target_sources(${PROJECT_NAME} PRIVATE ${_src})
17+
18+
target_include_directories(${PROJECT_NAME} PUBLIC
19+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>"
20+
)
21+
22+
target_include_directories(${PROJECT_NAME} PRIVATE . private)
23+
24+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)
25+
26+
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Widgets REQUIRED)
27+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets REQUIRED)
28+
29+
target_link_libraries(${PROJECT_NAME} PUBLIC
30+
Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets
31+
)
32+
33+
target_include_directories(${PROJECT_NAME} PRIVATE
34+
${Qt${QT_VERSION_MAJOR}Core_PRIVATE_INCLUDE_DIRS}
35+
${Qt${QT_VERSION_MAJOR}Widgets_PRIVATE_INCLUDE_DIRS}
36+
)
37+
38+
# Add platform specific
39+
if(WIN32)
40+
set(RC_DESCRIPTION "JetBrains Docking System Library")
41+
set(RC_COPYRIGHT "Copyright (C) 2020-2024 Stdware Collections")
42+
include("../../cmake/winrc.cmake")
43+
endif()
44+
45+
if(JBDS_INSTALL)
46+
target_include_directories(${PROJECT_NAME} PUBLIC
47+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
48+
)
49+
50+
install(TARGETS ${PROJECT_NAME}
51+
EXPORT ${JBDS_INSTALL_NAME}Targets
52+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL
53+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL
54+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL
55+
)
56+
57+
# Install headers
58+
file(GLOB _headers *.h)
59+
install(FILES ${_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${JBDS_INSTALL_NAME})
60+
endif()
61+
62+
if(JBDS_INSTALL)
63+
# Add install target
64+
set(_install_dir ${CMAKE_INSTALL_LIBDIR}/cmake/${JBDS_INSTALL_NAME})
65+
66+
# Add version file
67+
write_basic_package_version_file(
68+
"${CMAKE_CURRENT_BINARY_DIR}/${JBDS_INSTALL_NAME}ConfigVersion.cmake"
69+
VERSION ${PROJECT_VERSION}
70+
COMPATIBILITY AnyNewerVersion
71+
)
72+
73+
# Add configuration file
74+
configure_package_config_file(
75+
${CMAKE_CURRENT_LIST_DIR}/${JBDS_INSTALL_NAME}Config.cmake.in
76+
"${CMAKE_CURRENT_BINARY_DIR}/${JBDS_INSTALL_NAME}Config.cmake"
77+
INSTALL_DESTINATION ${_install_dir}
78+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
79+
)
80+
81+
# Install cmake files
82+
install(FILES
83+
"${CMAKE_CURRENT_BINARY_DIR}/${JBDS_INSTALL_NAME}Config.cmake"
84+
"${CMAKE_CURRENT_BINARY_DIR}/${JBDS_INSTALL_NAME}ConfigVersion.cmake"
85+
DESTINATION ${_install_dir}
86+
)
87+
88+
# Install cmake targets files
89+
install(EXPORT ${JBDS_INSTALL_NAME}Targets
90+
FILE "${JBDS_INSTALL_NAME}Targets.cmake"
91+
92+
# NAMESPACE ${JBDS_INSTALL_NAME}::
93+
DESTINATION ${_install_dir}
94+
)
95+
endif()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
include(CMakeFindDependencyMacro)
4+
5+
include("${CMAKE_CURRENT_LIST_DIR}/JetBrainsDockingSystemTargets.cmake")
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include "dockbutton.h"
2+
#include "dockbutton_p.h"
3+
4+
#include <QMenu>
5+
6+
namespace JBDS {
7+
8+
QAbstractButton *DefaultDockButtonDelegate::create(QWidget *parent) const {
9+
return new DockButton(parent);
10+
}
11+
12+
Qt::Orientation
13+
DefaultDockButtonDelegate::buttonOrientation(const QAbstractButton *button) const {
14+
return static_cast<const DockButton *>(button)->orientation();
15+
}
16+
17+
void DefaultDockButtonDelegate::setButtonOrientation(QAbstractButton *button,
18+
Qt::Orientation orientation) const {
19+
static_cast<DockButton *>(button)->setOrientation(orientation);
20+
}
21+
22+
QMenu *DefaultDockButtonDelegate::createViewModeMenu(QAbstractButton *button,
23+
QWidget *parent) const {
24+
return new QMenu(parent);
25+
}
26+
27+
DockButtonPrivate::DockButtonPrivate() {
28+
}
29+
30+
DockButtonPrivate::~DockButtonPrivate() {
31+
}
32+
33+
void DockButtonPrivate::init() {
34+
}
35+
36+
DockButton::DockButton(QWidget *parent) : DockButton(*new DockButtonPrivate(), parent) {
37+
}
38+
39+
DockButton::~DockButton() {
40+
}
41+
42+
Qt::Orientation DockButton::orientation() const {
43+
Q_D(const DockButton);
44+
return d->orientation;
45+
}
46+
47+
void DockButton::setOrientation(Qt::Orientation orientation) {
48+
Q_D(DockButton);
49+
d->orientation = orientation;
50+
}
51+
52+
DockButton::DockButton(DockButtonPrivate &d, QWidget *parent) : QPushButton(parent), d_ptr(&d) {
53+
d.q_ptr = this;
54+
55+
d.init();
56+
}
57+
58+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#ifndef DOCKBUTTON_H
2+
#define DOCKBUTTON_H
3+
4+
#include <QtWidgets/QPushButton>
5+
6+
#include <JetBrainsDockingSystem/dockbuttondelegate.h>
7+
8+
namespace JBDS {
9+
10+
class JBDS_EXPORT DefaultDockButtonDelegate : public DockButtonDelegate {
11+
public:
12+
QAbstractButton *create(QWidget *parent) const override;
13+
14+
Qt::Orientation buttonOrientation(const QAbstractButton *button) const override;
15+
void setButtonOrientation(QAbstractButton *button,
16+
Qt::Orientation orientation) const override;
17+
18+
QMenu *createViewModeMenu(QAbstractButton *button, QWidget *parent) const override;
19+
};
20+
21+
class DockButtonPrivate;
22+
23+
class JBDS_EXPORT DockButton : public QPushButton {
24+
Q_OBJECT
25+
Q_DECLARE_PRIVATE(DockButton)
26+
public:
27+
explicit DockButton(QWidget *parent = nullptr);
28+
explicit DockButton(const QString &text, QWidget *parent = nullptr);
29+
DockButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr);
30+
~DockButton();
31+
32+
public:
33+
Qt::Orientation orientation() const;
34+
void setOrientation(Qt::Orientation orientation);
35+
36+
protected:
37+
DockButton(DockButtonPrivate &d, QWidget *parent = nullptr);
38+
39+
QScopedPointer<DockButtonPrivate> d_ptr;
40+
};
41+
42+
}
43+
44+
#endif // DOCKBUTTON_H
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef DOCKBUTTON_P_H
2+
#define DOCKBUTTON_P_H
3+
4+
#include <JetBrainsDockingSystem/dockbutton.h>
5+
6+
namespace JBDS {
7+
8+
class DockButtonPrivate {
9+
Q_DECLARE_PUBLIC(DockButton)
10+
public:
11+
DockButtonPrivate();
12+
virtual ~DockButtonPrivate();
13+
14+
void init();
15+
16+
DockButton *q_ptr;
17+
18+
Qt::Orientation orientation = Qt::Horizontal;
19+
};
20+
21+
}
22+
23+
#endif // DOCKBUTTON_P_H
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include "dockbuttondelegate.h"
2+
3+
namespace JBDS {
4+
5+
DockButtonDelegate::~DockButtonDelegate() {
6+
}
7+
8+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef DOCKBUTTONDELEGATE_H
2+
#define DOCKBUTTONDELEGATE_H
3+
4+
#include <QtWidgets/QAbstractButton>
5+
#include <QtWidgets/QMenu>
6+
7+
#include <JetBrainsDockingSystem/jbdsnamespace.h>
8+
9+
namespace JBDS {
10+
11+
class JBDS_EXPORT DockButtonDelegate {
12+
public:
13+
virtual ~DockButtonDelegate();
14+
15+
virtual QAbstractButton *create(QWidget *parent) const = 0;
16+
17+
virtual Qt::Orientation buttonOrientation(const QAbstractButton *button) const = 0;
18+
virtual void setButtonOrientation(QAbstractButton *button,
19+
Qt::Orientation orientation) const = 0;
20+
21+
virtual QMenu *createViewModeMenu(QAbstractButton *button, QWidget *parent) const = 0;
22+
};
23+
24+
}
25+
26+
#endif // DOCKBUTTONDELEGATE_H

0 commit comments

Comments
 (0)