netradiant-custom/contrib/brushexport/interface.cpp
2022-10-27 09:10:31 +03:00

123 lines
4.3 KiB
C++

#include "debugging/debugging.h"
#include "callbacks.h"
#include "plugin.h"
#include <QEvent>
inline void qt_connect_shortcut_override( QWidget *widget ){
class Filter : public QObject
{
using QObject::QObject;
protected:
bool eventFilter( QObject *obj, QEvent *event ) override {
if( event->type() == QEvent::ShortcutOverride ) {
event->accept();
return true;
}
return QObject::eventFilter( obj, event ); // standard event processing
}
};
widget->installEventFilter( new Filter( widget ) );
}
#include <QKeyEvent>
class Del_QListWidget : public QListWidget
{
using QListWidget::QListWidget;
protected:
void keyPressEvent( QKeyEvent *event ) override {
if( event->matches( QKeySequence::StandardKey::Delete ) )
callbacks::OnRemoveMaterial();
QListWidget::keyPressEvent( event );
}
};
QWidget* create_w_plugplug2(){
auto window = g_dialog.window = new QWidget( g_pRadiantWnd, Qt::Window | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint );
window->setWindowTitle( "BrushExport-Plugin 3.0 by namespace" );
qt_connect_shortcut_override( window );
{
auto grid = new QGridLayout( window );
{
auto r_collapse = g_dialog.r_collapse = new QRadioButton( "Collapse mesh" );
r_collapse->setToolTip( "Collapse all brushes into a single group" );
grid->addWidget( r_collapse, 0, 0 );
auto r_collapsebymaterial = g_dialog.r_collapsebymaterial = new QRadioButton( "Collapse by material" );
r_collapsebymaterial->setToolTip( "Collapse into groups by material" );
grid->addWidget( r_collapsebymaterial, 1, 0 );
auto r_nocollapse = g_dialog.r_nocollapse = new QRadioButton( "Don't collapse" );
r_nocollapse->setToolTip( "Every brush is stored in its own group" );
grid->addWidget( r_nocollapse, 2, 0 );
r_nocollapse->setChecked( true );
}
{
auto b_export = g_dialog.b_export = new QPushButton( "Save" );
grid->addWidget( b_export, 0, 1 );
b_export->setDisabled( true );
QObject::connect( b_export, &QAbstractButton::clicked, callbacks::OnExportClicked );
auto b_exportAs = new QPushButton( "Save As" );
grid->addWidget( b_exportAs, 1, 1 );
QObject::connect( b_exportAs, &QAbstractButton::clicked, [](){
callbacks::OnExportClicked( true );
} );
auto b_close = new QPushButton( "Cancel" );
grid->addWidget( b_close, 2, 1 );
QObject::connect( b_close, &QAbstractButton::clicked, window, &QWidget::hide );
}
{
grid->addWidget( new QLabel( "Ignored materials:" ), 3, 0, 1, 2, Qt::AlignmentFlag::AlignHCenter );
}
{
auto t_materialist = g_dialog.t_materialist = new Del_QListWidget;
grid->addWidget( t_materialist, 4, 0, 1, 2 );
t_materialist->setEditTriggers( QAbstractItemView::EditTrigger::DoubleClicked | QAbstractItemView::EditTrigger::EditKeyPressed );
}
{
auto ed_materialname = g_dialog.ed_materialname = new QLineEdit;
grid->addWidget( ed_materialname, 5, 0, 1, 2 );
QObject::connect( ed_materialname, &QLineEdit::returnPressed, callbacks::OnAddMaterial );
}
{
auto b_addmaterial = new QPushButton( "Add" );
grid->addWidget( b_addmaterial, 6, 0 );
QObject::connect( b_addmaterial, &QAbstractButton::clicked, callbacks::OnAddMaterial );
auto b_removematerial = new QPushButton( "Remove" );
grid->addWidget( b_removematerial, 6, 1 );
QObject::connect( b_removematerial, &QAbstractButton::clicked, callbacks::OnRemoveMaterial );
}
{
auto t_limitmatnames = g_dialog.t_limitmatnames = new QCheckBox( "Use short material names (max. 20 chars)" );
grid->addWidget( t_limitmatnames, 7, 0, 1, 2 );
auto t_objects = g_dialog.t_objects = new QCheckBox( "Create (o)bjects instead of (g)roups" );
grid->addWidget( t_objects, 8, 0, 1, 2 );
auto t_weld = g_dialog.t_weld = new QCheckBox( "Weld vertices" );
grid->addWidget( t_weld, 9, 0, 1, 2 );
t_weld->setToolTip( "inside groups/objects" );
t_weld->setChecked( true );
auto t_exportmaterials = g_dialog.t_exportmaterials = new QCheckBox( "Create material information (.mtl file)" );
grid->addWidget( t_exportmaterials, 10, 0, 1, 2 );
t_exportmaterials->setChecked( true );
}
}
return window;
}
// global main window, is 0 when not created
// spawn or unhide plugin window
void CreateWindow(){
if( g_dialog.window == nullptr )
g_dialog.window = create_w_plugplug2();
g_dialog.window->show();
}