add WAsm app for doxygen

This commit is contained in:
Peter Hartmann 2024-11-18 16:55:44 +01:00
parent 6d7ffc8636
commit 1fec74c8bf
4 changed files with 333 additions and 1 deletions

View File

@ -62,7 +62,7 @@
}
}
</script>
<script src="iotdashboard.js"></script>
<script src="apiDocumentationSamples.js"></script>
<script type="text/javascript" src="qtloader.js"></script>
<!-- end QSkinny WASM code -->
$treeview

View File

@ -11,6 +11,7 @@ add_subdirectory(qvgviewer)
add_subdirectory(thumbnails)
add_subdirectory(tabview)
add_subdirectory(iotdashboard)
add_subdirectory(apiDocumentationSamples)
if( BUILD_QML_EXPORT )
add_subdirectory(boxes)

View File

@ -0,0 +1,11 @@
############################################################################
# QSkinny - Copyright (C) The authors
# SPDX-License-Identifier: BSD-3-Clause
############################################################################
set(SOURCES
main.cpp
)
qsk_add_example(apiDocumentationSamples ${SOURCES})

View File

@ -0,0 +1,320 @@
/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#include <SkinnyNamespace.h>
#include <QskCheckBox.h>
#include <QskComboBox.h>
#include <QskDrawer.h>
#include <QskIcon.h>
#include <QskSkinManager.h>
#include <QskLabelData.h>
#include <QskLinearBox.h>
#include <QskMainView.h>
#include <QskPageIndicator.h>
#include <QskSpinBox.h>
#include <QskProgressBar.h>
#include <QskProgressRing.h>
#include <QskPushButton.h>
#include <QskRadioBox.h>
#include <QskScrollArea.h>
#include <QskSegmentedBar.h>
#include <QskSeparator.h>
#include <QskSimpleListBox.h>
#include <QskSlider.h>
#include <QskSwipeView.h>
#include <QskSwitchButton.h>
#include <QskTabBar.h>
#include <QskTabButton.h>
#include <QskTabView.h>
#include <QskTextInput.h>
#include <QskTextLabel.h>
#include <QskWindow.h>
#include <QGuiApplication>
#include <QRegularExpression>
#ifdef Q_OS_WASM
#include <emscripten/val.h>
#endif
namespace
{
class SkinsBar : public QskSegmentedBar
{
public:
SkinsBar() : QskSegmentedBar()
{
const auto skins = qskSkinManager->skinNames();
for( int i = 0; i < skins.count(); ++i )
{
addOption( {}, skins.at( i ) );
if( skins.at( i ) == qskSkinManager->skinName() )
{
setCurrentIndex( i );
}
}
connect( this, &QskSegmentedBar::currentIndexChanged, this, [ this ]( int i )
{
if( i >= 0 )
{
qskSkinManager->setSkin( optionAt( i ).text() );
}
} );
}
};
class BrightnessBar : public QskSegmentedBar
{
public:
BrightnessBar() : QskSegmentedBar()
{
QStringList options = { "bright", "dark" };
for( auto& option : options )
{
addOption( {}, option );
}
connect( this, &QskSegmentedBar::currentIndexChanged, this, [ this, options ]( int i )
{
if( i>= 0 )
{
auto s = qskSkinManager->skin();
const auto scheme = optionAt( currentIndex() ).text() == options.at( 0 )
? QskSkin::LightScheme : QskSkin::DarkScheme;
s->setColorScheme( scheme );
}
} );
connect( qskSkinManager, &QskSkinManager::skinChanged, this, [ this ]()
{
const auto scheme = ( selectedIndex() == 0 ) ? QskSkin::LightScheme : QskSkin::DarkScheme;
auto s = qskSkinManager->skin();
s->setColorScheme( scheme );
} );
}
};
QskControl* createControl( const QByteArray& name )
{
if( name == "CheckBox" )
{
return new QskCheckBox( "check box" );
}
if( name == "ComboBox" )
{
return new QskComboBox;
}
if( name == "Drawer" )
{
auto box = new QskLinearBox;
box->setPanel( true );
box->setPreferredSize( 200, 200 );
auto button = new QskPushButton( "open drawer", box );
auto d = new QskDrawer( box );
d->setEdge( Qt::RightEdge );
auto drawerBox = new QskLinearBox( Qt::Vertical, d );
drawerBox->setMargins( 20 );
new QskTextLabel( "drawer element 1 ", drawerBox );
new QskTextLabel( "drawer element 2 ", drawerBox );
new QskTextLabel( "drawer element 3 ", drawerBox );
QObject::connect( button, &QskPushButton::clicked, d, &QskDrawer::toggle );
return box;
}
if( name == "LinearBox" )
{
auto b = new QskLinearBox;
b->addItem( new QskTextLabel( "item 1" ) );
b->addItem( new QskTextLabel( "item 2" ) );
b->addItem( new QskTextLabel( "item 3" ) );
return b;
}
if( name == "PageIndicator" )
{
auto i = new QskPageIndicator( 5 );
i->setCurrentIndex( 0 );
return i;
}
if( name == "ProgressBar" )
{
auto b = new QskProgressBar( 1, 10 );
b->setIndeterminate( true );
return b;
}
if( name == "ProgressRing" )
{
auto r = new QskProgressRing( 1, 10 );
r->setIndeterminate( true );
return r;
}
if( name == "PushButton" )
{
return new QskPushButton( "button" );
}
if( name == "SpinBox" )
{
return new QskSpinBox( 1, 10, 2 );
}
if( name == "RadioBox" )
{
auto r = new QskRadioBox( { "one", "two", "three" } );
r->setSelectedIndex( 0 );
return r;
}
if( name == "ScrollArea" )
{
return nullptr; // ###
}
if( name == "SegmentedBar" )
{
auto b = new QskSegmentedBar;
b->addOption( {}, "one" );
b->addOption( {}, "two" );
b->addOption( {}, "three" );
return b;
}
if( name == "Separator" )
{
return nullptr; // ###
}
if( name == "SimpleListBox" )
{
auto b = new QskSimpleListBox;
b->setEntries( { "one", "two", "three", "four" } );
b->setSelectedRow( 0 );
b->setFixedSize( 200, 150 );
return b;
}
if( name == "Slider" )
{
auto s = new QskSlider;
s->setPreferredWidth( 200 );
return s;
}
if( name == "SpinBox" )
{
return new QskSpinBox;
}
if( name == "SwipeView" )
{
auto s = new QskSwipeView;
s->setPreferredSize( 200, 200 );
auto t1 = new QskTextLabel( "view 1 - swipe to the side" );
t1->setAlignment( Qt::AlignCenter );
auto t2 = new QskTextLabel( "view 2 - swipe to the side" );
t2->setAlignment( Qt::AlignCenter );
auto t3 = new QskTextLabel( "view 3 - swipe to the side" );
t3->setAlignment( Qt::AlignCenter );
s->addItem( t1, Qt::AlignCenter );
s->addItem( t2, Qt::AlignCenter );
s->addItem( t3, Qt::AlignCenter );
return s;
}
if( name == "SwitchButton" )
{
return new QskSwitchButton;
}
if( name == "TabBar" )
{
auto b = new QskTabBar;
b->setPreferredSize( 300, 100 );
b->addTab( "tab 1 " );
b->addTab( "tab 2 " );
b->addTab( "tab 3 " );
return b;
}
if( name == "TabButton" )
{
return new QskTabButton( "tab button" );
}
if( name == "TabView" )
{
auto t = new QskTabView;
t->setPreferredSize( 300, 200 );
t->addTab( "tab 1 ", new QskTextLabel( "tab content 1" ) );
t->addTab( "tab 2 ", new QskTextLabel( "tab content 2" ) );
t->addTab( "tab 3 ", new QskTextLabel( "tab content 3" ) );
return t;
}
if( name == "TextInput" )
{
auto t = new QskTextInput;
t->setPreferredWidth( 100 );
return t;
}
if( name == "TextLabel" )
{
return new QskTextLabel( "text label" );
}
else
{
return nullptr;
}
}
}
int main( int argc, char* argv[] )
{
QGuiApplication app( argc, argv );
QByteArray className;
#ifdef Q_OS_WASM // Doxygen file name will be classQskSlider.html etc.
emscripten::val location = emscripten::val::global( "location" );
const auto href = location["href"].as< std::string >();
const QUrl url( QString::fromStdString( href ) );
static QRegularExpression re( "classQsk(.*)\\.html" );
auto match = re.match( url.fileName() );
if( match.hasMatch() )
{
className = match.captured( 1 ).toUtf8();
}
else
{
qFatal() << "could not deduce class from" << url.fileName();
}
#else
if( argc < 2 )
{
qFatal( "usage: %s [CheckBox|PushButton|etc.]", argv[0] );
}
className = argv[1];
#endif
Skinny::init();
auto mainView = new QskMainView;
mainView->setPadding( 20 );
mainView->setSpacing( 20 );
mainView->setPanel( true );
auto* c = createControl( className );
mainView->setHeader( c );
mainView->setBody( new SkinsBar );
mainView->setFooter( new BrightnessBar );
QskWindow window;
window.addItem( mainView );
window.show();
return app.exec();
}
#include "main.moc"