qt-agistudio/src/options.cpp

298 lines
7.7 KiB
C++

/*
* QT AGI Studio :: Copyright (C) 2000 Helen Zommer
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include "options.h"
#include "game.h"
#include <stdlib.h>
#include <qapplication.h>
#include <q3filedialog.h>
//Added by qt3to4:
#include <Q3BoxLayout>
#include <Q3HBoxLayout>
#include <Q3VBoxLayout>
#include <QLabel>
Options *options;
//***********************************************
Options::Options( QWidget *parent, const char *name)
: Q3TabDialog( parent, name)
{
setCaption("Settings");
set_general();
set_directories();
set_logedit();
set_interpreter();
connect( this, SIGNAL( applyButtonPressed() ), SLOT( apply() ) );
setDefaultButton();
connect( this, SIGNAL( defaultButtonPressed() ), SLOT( defaults() ) );
setCancelButton();
set_settings();
}
//***********************************************
void Options::set_general()
{
QWidget *general = new QWidget(this);
Q3BoxLayout *all = new Q3VBoxLayout(general,10);
Q3GroupBox *b1 = new Q3GroupBox(2,Horizontal,"",general);
QLabel *l = new QLabel("Default resource type",b1);
l->setText("Default resource type"); //to avoid compilation warning
type = new QComboBox(false,b1,"type");
type->insertItem( "LOGIC" );
type->insertItem( "PICTURE" );
type->insertItem( "VIEW" );
type->insertItem( "SOUND" );
QLabel *l2 = new QLabel("Picedit style",b1);
l2->setText("Picedit style"); //to avoid compilation warning
picstyle = new QComboBox(false,b1,"picstyle");
picstyle->insertItem( "One window" );
picstyle->insertItem( "Two windows" );
all->addWidget(b1);
Q3ButtonGroup *extract = new Q3ButtonGroup(2,Horizontal,"Extract logic as",general);
extract->setMaximumSize(200,100);
extract->setExclusive(true);
text = new QRadioButton("Text",extract);
binary = new QRadioButton("Binary",extract);
all->addWidget(extract);
addTab(general,"General");
}
//***********************************************
void Options::set_logedit()
{
QWidget *logedit = new QWidget(this);
Q3BoxLayout *all = new Q3VBoxLayout(logedit,10);
messages = new QCheckBox("Show all messages at end (not just unused ones)",logedit);
all->addWidget(messages);
elses = new QCheckBox("Show all elses as gotos",logedit);
all->addWidget(elses);
special = new QCheckBox("Show special syntax (e.g. v30=4)",logedit);
all->addWidget(special);
addTab(logedit,"Logic editor");
}
//***********************************************
void Options::set_directories()
{
QWidget *dirs = new QWidget(this);
Q3BoxLayout *all = new Q3VBoxLayout(dirs,10);
Q3GroupBox *src = new Q3GroupBox(3,Horizontal,"Logic source directory",dirs);
reldir = new QRadioButton("[Game_dir/]",src);
connect(reldir,SIGNAL(clicked()),SLOT(set_reldir()));
relname = new QLineEdit(src);
QLabel *l = new QLabel(" ",src); //dummy label to keep table alignment
l->setText(" "); //to avoid compilation warning
absdir = new QRadioButton("Full path",src);
connect(absdir,SIGNAL(clicked()),SLOT(set_absdir()));
absname = new QLineEdit(src);
QPushButton *browse = new QPushButton("Browse",src);
connect(browse,SIGNAL(clicked()),SLOT(browse_abs()));
all->addWidget(src);
Q3BoxLayout *b1 = new Q3HBoxLayout(all);
QLabel *lt = new QLabel("Template:",dirs);
b1->addWidget(lt);
templatedir = new QLineEdit(dirs);
b1->addWidget(templatedir);
QPushButton *browse1 = new QPushButton("Browse",dirs);
b1->addWidget(browse1);
connect(browse1,SIGNAL(clicked()),SLOT(browse_template()));
Q3BoxLayout *b2 = new Q3HBoxLayout(all);
QLabel *lh = new QLabel("Help:",dirs);
b2->addWidget(lh);
helpdir = new QLineEdit(dirs);
b2->addWidget(helpdir);
QPushButton *browse2 = new QPushButton("Browse",dirs);
b2->addWidget(browse2);
connect(browse2,SIGNAL(clicked()),SLOT(browse_help()));
addTab(dirs,"Directories");
}
//***********************************************
void Options::set_interpreter()
{
QWidget *interp = new QWidget(this);
Q3BoxLayout *all = new Q3VBoxLayout(interp,10);
QLabel *l = new QLabel("Interpreter command line:\n(will be invoked with the\ncurrent directory == game_directory)",interp);
all->addWidget(l);
Q3BoxLayout *b1 = new Q3HBoxLayout(all);
command = new QLineEdit(interp);
b1->addWidget(command);
QPushButton *browse = new QPushButton("Browse",interp);
browse->setMaximumSize(80,60);
connect(browse,SIGNAL(clicked()),SLOT(browse_interpreter()));
b1->addWidget(browse);
addTab(interp,"Interpreter");
}
//***********************************************
void Options::apply()
{
game->res_default=type->currentItem();
game->save_logic_as_text=text->isChecked();
game->show_all_messages=messages->isChecked();
game->show_elses_as_gotos=elses->isChecked();
game->show_special_syntax=special->isChecked();
game->reldir=reldir->isChecked();
game->command=string((char *)command->text().latin1());
if(game->reldir){
game->srcdirname=string((char *)relname->text().latin1());
}
else{
game->srcdirname=string((char *)absname->text().latin1());
}
game->templatedir=string((char *)templatedir->text().latin1());
game->helpdir=string((char *)helpdir->text().latin1());
game->picstyle=picstyle->currentItem();
game->save_settings();
hide();
}
//***********************************************
void Options::defaults()
{
game->defaults();
set_settings();
}
//***********************************************
void Options::set_settings()
{
type->setCurrentItem(game->res_default);
text->setChecked(game->save_logic_as_text);
messages->setChecked(game->show_all_messages);
elses->setChecked(game->show_elses_as_gotos);
special->setChecked(game->show_special_syntax);
reldir->setChecked(game->reldir);
absdir->setChecked(!(game->reldir));
command->setText(game->command.c_str());
if(game->reldir){
relname->setText(game->srcdirname.c_str());
absname->clear();
}
else{
absname->setText(game->srcdirname.c_str());
relname->clear();
}
templatedir->setText(game->templatedir.c_str());
helpdir->setText(game->helpdir.c_str());
picstyle->setCurrentItem(game->picstyle);
}
//***********************************************
void Options::browse_abs()
{
QString s (Q3FileDialog::getExistingDirectory ());
if(s.isNull())return;
absname->setText(s);
}
//***********************************************
void Options::browse_template()
{
QString s (Q3FileDialog::getExistingDirectory ());
if(s.isNull())return;
templatedir->setText(s);
}
//***********************************************
void Options::browse_help()
{
QString s (Q3FileDialog::getExistingDirectory ());
if(s.isNull())return;
helpdir->setText(s);
}
//***********************************************
void Options::browse_interpreter()
{
QString s (Q3FileDialog::getOpenFileName ());
if(s.isNull())return;
command->setText(s);
}
//***********************************************
void Options::set_reldir()
{
absdir->setChecked(false);
}
//***********************************************
void Options::set_absdir()
{
reldir->setChecked(false);
}
//***********************************************