set(sources
  App.cpp
  MenuManager.cpp
  Menu.cpp
  MainMenu.cpp
  ProjectManager.cpp
  ProjectPacker.cpp
  ProjectBackupManager.cpp
  PathVariableEditor.cpp
  PluginManager.cpp
  MainWindow.cpp
  ViewArea.cpp
  ToolBarArea.cpp
  InfoBar.cpp
  ViewManager.cpp
  View.cpp
  LayoutSwitcher.cpp
  MessageView.cpp
  ItemManager.cpp
  ItemClassRegistry.cpp
  ItemFileIO.cpp
  ItemFileDialog.cpp
  Item.cpp
  ItemAddon.cpp
  LocatableItem.cpp
  RenderableItem.cpp
  RenderableItemUtil.cpp
  RenderableItemSceneStatistics.cpp
  RenderableItemSceneExporter.cpp
  PolymorphicItemFunctionSet.cpp
  PutPropertyFunction.cpp
  RootItem.cpp
  ItemList.cpp
  ItemPath.cpp
  ItemTreeWidget.cpp
  ItemTreeView.cpp
  ItemTreePanelDialog.cpp
  ItemPropertyWidget.cpp
  ItemPropertyView.cpp
  TargetItemPicker.cpp
  UnifiedEditHistory.cpp
  EditRecord.cpp
  ItemEditRecordManager.cpp
  UnifiedEditHistoryView.cpp
  StringListComboBox.cpp
  DisplayValueFormat.cpp
  PositionWidget.cpp
  LocationView.cpp
  ToolBar.cpp
  TimeBar.cpp
  ScriptBar.cpp
  FileBar.cpp
  CaptureBar.cpp
  DisplayValueFormatBar.cpp
  GraphWidget.cpp
  GraphBar.cpp
  GraphViewBase.cpp
  MultiValueSeqGraphView.cpp
  MultiSE3SeqGraphView.cpp
  Process.cpp
  Action.cpp
  CheckBoxAction.cpp
  ActionGroup.cpp
  Widget.cpp
  SpinBox.cpp
  DoubleSpinBox.cpp
  LengthSpinBox.cpp
  FloatingNumberBox.cpp
  ScrollBar.cpp
  Slider.cpp
  Dial.cpp
  Splitter.cpp
  PushButton.cpp
  ToggleButton.cpp
  RadioButton.cpp
  ToolButton.cpp
  ToggleToolButton.cpp
  ButtonGroup.cpp
  CheckBox.cpp
  LineEdit.cpp
  ComboBox.cpp
  Dialog.cpp
  FileDialog.cpp
  DescriptionDialog.cpp
  Timer.cpp
  SocketNotifier.cpp
  ImageWidget.cpp
  TreeView.cpp
  TreeWidget.cpp
  ItemSelectionModel.cpp
  ExtensionManager.cpp
  OptionManager.cpp
  Plugin.cpp
  FolderItem.cpp
  SubProjectItem.cpp
  AbstractSeqItem.cpp
  MultiValueSeqItem.cpp
  MultiSE3SeqItem.cpp
  MultiSE3MatrixSeqItem.cpp
  Vector3SeqItem.cpp
  MultiVector3SeqItem.cpp
  ReferencedObjectSeqItem.cpp
  CoordinateFrameListItem.cpp
  CoordinateFrameItem.cpp
  ExtCommandItem.cpp
  AbstractTextItem.cpp
  ScriptItem.cpp
  TimeSyncItemEngine.cpp
  AppConfig.cpp
  Archive.cpp
  ItemTreeArchiver.cpp
  LazyCaller.cpp
  LazySignal.cpp
  Licenses.cpp
  SceneRendererConfig.cpp
  SceneWidget.cpp
  SceneWidgetEvent.cpp
  SceneWidgetEventHandler.cpp
  SceneWidgetConfig.cpp
  ScenePointSelectionMode.cpp
  InteractiveCameraTransform.cpp
  SceneProjector.cpp
  SceneDragProjector.cpp
  PositionDragger.cpp
  RectRegionMarker.cpp
  CoordinateFrameMarker.cpp
  SceneView.cpp
  SceneViewConfig.cpp
  SceneBar.cpp
  SceneItem.cpp
  SceneItemFileIO.cpp
  SceneGeometryMeasurementTracker.cpp
  GeneralSceneFileImporterBase.cpp
  GeneralSceneFileLoadDialog.cpp
  CameraItem.cpp
  CameraConfigDialog.cpp
  LightingItem.cpp
  PointSetItem.cpp
  PointSetGeometryMeasurementTracker.cpp
  MultiPointSetItem.cpp
  PositionTagGroupItem.cpp
  PositionTagListWidget.cpp
  GeometryMeasurementTracker.cpp
  DistanceMeasurementItem.cpp
  DistanceMeasurementDialog.cpp
  MovieRecorder.cpp
  MovieRecorderBar.cpp
  MovieRecorderDialog.cpp
  TextEditView.cpp
  GeneralSliderView.cpp
  ImageView.cpp
  TextEdit.cpp
  CoordinateFrameListView.cpp
  TaskView.cpp
  VirtualJoystickView.cpp
  MessageLogItem.cpp
  QtSvgUtil.cpp
  )

if(CMAKE_SYSTEM_NAME STREQUAL Linux)
  set(sources ${sources} JoystickCaptureLinux.cpp)
elseif(WIN32)
  #set(sources ${sources} JoystickCaptureWindows.cpp)
elseif(APPLE)
  #set(sources ${sources} JoystickCaptureOSX.cpp)
endif()

set(headers
  App.h
  AppCustomizationUtil.h
  MainWindow.h
  Process.h
  Action.h
  CheckBoxAction.h
  ActionGroup.h
  Widget.h
  SpinBox.h
  DoubleSpinBox.h
  LengthSpinBox.h
  FloatingNumberBox.h
  ScrollBar.h
  Slider.h
  Dial.h
  Splitter.h
  Separator.h
  PushButton.h
  ToggleButton.h
  RadioButton.h
  ToolButton.h
  ToggleToolButton.h
  Buttons.h
  ButtonGroup.h
  CheckBox.h
  LineEdit.h
  ComboBox.h
  Dialog.h
  FileDialog.h
  DescriptionDialog.h
  Timer.h
  SocketNotifier.h
  ImageWidget.h
  TreeView.h
  TreeWidget.h
  ItemSelectionModel.h
  MenuManager.h
  Menu.h
  MainMenu.h
  ToolBar.h
  View.h
  ViewArea.h
  InfoBar.h
  ViewManager.h
  LayoutSwitcher.h
  GraphWidget.h
  GraphViewBase.h
  ExtensionManager.h
  OptionManager.h
  ProjectManager.h
  ProjectPacker.h
  ProjectBackupManager.h
  PluginManager.h
  Plugin.h
  MessageView.h
  ItemTreeWidget.h
  ItemTreeView.h
  ItemTreePanelDialog.h
  ItemPropertyWidget.h
  ItemList.h
  Item.h
  ItemAddon.h
  LocatableItem.h
  RenderableItem.h
  RenderableItemUtil.h
  RenderableItemSceneExporter.h
  ImageableItem.h
  TargetItemPicker.h
  UnifiedEditHistory.h
  EditRecord.h
  ItemEditRecordManager.h
  StringListComboBox.h
  DisplayValueFormat.h
  PositionWidget.h
  LocationView.h
  PutPropertyFunction.h
  RootItem.h
  FolderItem.h
  SubProjectItem.h
  AbstractSeqItem.h
  MultiSeqItem.h
  MultiValueSeqItem.h
  MultiSE3SeqItem.h
  MultiSE3MatrixSeqItem.h
  Vector3SeqItem.h
  ReferencedObjectSeqItem.h
  CoordinateFrameListItem.h
  CoordinateFrameItem.h
  ExtCommandItem.h
  AbstractTextItem.h
  ScriptItem.h
  ItemPath.h
  TimeBar.h
  TimeSyncItemEngine.h
  GraphBar.h
  ItemManager.h
  ItemClassRegistry.h
  ItemFileIO.h
  ItemFileDialog.h
  PolymorphicItemFunctionSet.h
  AppConfig.h
  AppUtil.h
  Archive.h
  ItemTreeArchiver.h
  LazySignal.h
  LazyCaller.h
  SceneWidget.h
  SceneWidgetEvent.h
  SceneWidgetEventHandler.h
  SceneWidgetConfig.h
  SceneProjector.h
  SceneDragProjector.h
  PositionDragger.h
  SceneBar.h
  ScenePointSelectionMode.h
  InteractiveCameraTransform.h
  RectRegionMarker.h
  CoordinateFrameMarker.h
  SceneRendererConfig.h
  SceneView.h
  SceneViewConfig.h
  SceneItem.h
  SceneItemFileIO.h
  GeneralSceneFileImporterBase.h
  GeneralSceneFileLoadDialog.h
  CameraItem.h
  CameraConfigDialog.h
  LightingItem.h
  PointSetItem.h
  MultiPointSetItem.h
  PositionTagGroupItem.h
  PositionTagListWidget.h
  GeometryMeasurementTracker.h
  DistanceMeasurementItem.h
  DistanceMeasurementDialog.h
  MovieRecorder.h
  MovieRecorderBar.h
  MovieRecorderDialog.h
  TextEditView.h
  GeneralSliderView.h
  ImageView.h
  JoystickCapture.h
  TextEdit.h
  TaskView.h
  MessageLogItem.h
  QtEventUtil.h
  QVariantUtil.h
  QtSvgUtil.h
  exportdecl.h
  )

set(target CnoidBase)

set(qtheaders
  Menu.h
  ToolBar.h
  Process.h
  Action.h
  ActionGroup.h
  Widget.h
  FloatingNumberBox.h
  ScrollBar.h
  Splitter.h
  TreeView.h
  ItemSelectionModel.h
  Timer.h
  SocketNotifier.h
  StringListComboBox.h
  TextEdit.h
  )

choreonoid_qt_add_resources(RC_SRCS Base.qrc)
choreonoid_qt_wrap_cpp(qtsources ${qtheaders})

set(sources ${sources} ${qtsources})

make_gettext_mofiles(${target} mofiles)

set(libraries
  PUBLIC CnoidUtil ${CHOREONOID_QT_LIBRARIES}
  PRIVATE CnoidGLSceneRenderer ${libzip_LIBRARIES})

if(UNIX)
  set(libraries ${libraries} PRIVATE X11 Xfixes)
endif()

choreonoid_add_library(${target} SHARED ${sources} ${mofiles} ${RC_SRCS} HEADERS ${headers})
target_compile_definitions(${target} PUBLIC ${CHOREONOID_QT_COMPILE_DEFINITIONS})
target_link_libraries(${target} ${libraries})

file(MAKE_DIRECTORY ${CNOID_BINARY_SHARE_DIR}/icon)
file(COPY icon/choreonoid.svg DESTINATION ${CNOID_BINARY_SHARE_DIR}/icon)
install(FILES icon/choreonoid.svg DESTINATION ${CNOID_SHARE_SUBDIR}/icon)

if(ENABLE_PYTHON)
  add_subdirectory(pybind11)
endif()

add_subdirectory(lua)
