2011-05-12 14:49:42 +02:00
# include "optionsdialog.h"
2011-05-31 22:24:53 +02:00
# include "optionsmodel.h"
2011-06-01 14:40:06 +02:00
# include "monitoreddatamapper.h"
2011-05-12 14:44:52 +02:00
# include <QHBoxLayout>
# include <QVBoxLayout>
# include <QPushButton>
2011-05-13 22:00:27 +02:00
# include <QListWidget>
# include <QStackedWidget>
2011-06-01 14:40:06 +02:00
# include <QCheckBox>
# include <QLabel>
# include <QLineEdit>
# include <QIntValidator>
# include <QDoubleValidator>
# include <QRegExpValidator>
/* First (currently only) page of options */
class MainOptionsPage : public QWidget
{
public :
explicit MainOptionsPage ( QWidget * parent = 0 ) ;
void setMapper ( MonitoredDataMapper * mapper ) ;
private :
QCheckBox * bitcoin_at_startup ;
QCheckBox * minimize_to_tray ;
QCheckBox * map_port_upnp ;
QCheckBox * minimize_on_close ;
QCheckBox * connect_socks4 ;
QLineEdit * proxy_ip ;
QLineEdit * proxy_port ;
QLineEdit * fee_edit ;
signals :
public slots :
} ;
2011-05-12 14:44:52 +02:00
2011-05-31 22:24:53 +02:00
OptionsDialog : : OptionsDialog ( QWidget * parent ) :
QDialog ( parent ) , contents_widget ( 0 ) , pages_widget ( 0 ) ,
main_options_page ( 0 ) , model ( 0 )
2011-05-12 14:44:52 +02:00
{
contents_widget = new QListWidget ( ) ;
contents_widget - > setMaximumWidth ( 128 ) ;
pages_widget = new QStackedWidget ( ) ;
pages_widget - > setMinimumWidth ( 300 ) ;
QListWidgetItem * item_main = new QListWidgetItem ( tr ( " Main " ) ) ;
contents_widget - > addItem ( item_main ) ;
2011-05-31 22:24:53 +02:00
main_options_page = new MainOptionsPage ( this ) ;
pages_widget - > addWidget ( main_options_page ) ;
2011-05-12 14:44:52 +02:00
contents_widget - > setCurrentRow ( 0 ) ;
QHBoxLayout * main_layout = new QHBoxLayout ( ) ;
main_layout - > addWidget ( contents_widget ) ;
main_layout - > addWidget ( pages_widget , 1 ) ;
QVBoxLayout * layout = new QVBoxLayout ( ) ;
layout - > addLayout ( main_layout ) ;
QHBoxLayout * buttons = new QHBoxLayout ( ) ;
buttons - > addStretch ( 1 ) ;
QPushButton * ok_button = new QPushButton ( tr ( " OK " ) ) ;
buttons - > addWidget ( ok_button ) ;
QPushButton * cancel_button = new QPushButton ( tr ( " Cancel " ) ) ;
buttons - > addWidget ( cancel_button ) ;
2011-06-01 09:33:48 +02:00
apply_button = new QPushButton ( tr ( " Apply " ) ) ;
apply_button - > setEnabled ( false ) ;
2011-05-12 14:44:52 +02:00
buttons - > addWidget ( apply_button ) ;
layout - > addLayout ( buttons ) ;
setLayout ( layout ) ;
setWindowTitle ( tr ( " Options " ) ) ;
2011-06-01 09:33:48 +02:00
/* Widget-to-option mapper */
2011-06-01 14:40:06 +02:00
mapper = new MonitoredDataMapper ( this ) ;
2011-05-31 22:24:53 +02:00
mapper - > setSubmitPolicy ( QDataWidgetMapper : : ManualSubmit ) ;
mapper - > setOrientation ( Qt : : Vertical ) ;
2011-06-01 14:40:06 +02:00
/* enable apply button when data modified */
connect ( mapper , SIGNAL ( viewModified ( ) ) , this , SLOT ( enableApply ( ) ) ) ;
/* disable apply button when new data loaded */
connect ( mapper , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( disableApply ( ) ) ) ;
2011-06-01 09:33:48 +02:00
/* Event bindings */
connect ( ok_button , SIGNAL ( clicked ( ) ) , this , SLOT ( okClicked ( ) ) ) ;
connect ( cancel_button , SIGNAL ( clicked ( ) ) , this , SLOT ( cancelClicked ( ) ) ) ;
connect ( apply_button , SIGNAL ( clicked ( ) ) , this , SLOT ( applyClicked ( ) ) ) ;
2011-05-31 22:24:53 +02:00
}
void OptionsDialog : : setModel ( OptionsModel * model )
{
this - > model = model ;
mapper - > setModel ( model ) ;
main_options_page - > setMapper ( mapper ) ;
2011-05-12 14:44:52 +02:00
2011-05-31 22:24:53 +02:00
mapper - > toFirst ( ) ;
2011-05-12 14:44:52 +02:00
}
void OptionsDialog : : changePage ( QListWidgetItem * current , QListWidgetItem * previous )
{
Q_UNUSED ( previous ) ;
if ( current )
{
pages_widget - > setCurrentIndex ( contents_widget - > row ( current ) ) ;
}
}
2011-06-01 09:33:48 +02:00
void OptionsDialog : : okClicked ( )
{
mapper - > submit ( ) ;
accept ( ) ;
}
void OptionsDialog : : cancelClicked ( )
{
reject ( ) ;
}
void OptionsDialog : : applyClicked ( )
{
mapper - > submit ( ) ;
apply_button - > setEnabled ( false ) ;
}
void OptionsDialog : : enableApply ( )
{
apply_button - > setEnabled ( true ) ;
}
2011-06-01 14:40:06 +02:00
void OptionsDialog : : disableApply ( )
{
apply_button - > setEnabled ( false ) ;
}
MainOptionsPage : : MainOptionsPage ( QWidget * parent ) :
QWidget ( parent )
{
QVBoxLayout * layout = new QVBoxLayout ( ) ;
bitcoin_at_startup = new QCheckBox ( tr ( " &Start Bitcoin on window system startup " ) ) ;
layout - > addWidget ( bitcoin_at_startup ) ;
minimize_to_tray = new QCheckBox ( tr ( " &Minimize to the tray instead of the taskbar " ) ) ;
layout - > addWidget ( minimize_to_tray ) ;
map_port_upnp = new QCheckBox ( tr ( " Map port using &UPnP " ) ) ;
layout - > addWidget ( map_port_upnp ) ;
minimize_on_close = new QCheckBox ( tr ( " M&inimize on close " ) ) ;
layout - > addWidget ( minimize_on_close ) ;
connect_socks4 = new QCheckBox ( tr ( " &Connect through socks4 proxy: " ) ) ;
layout - > addWidget ( connect_socks4 ) ;
QHBoxLayout * proxy_hbox = new QHBoxLayout ( ) ;
proxy_hbox - > addSpacing ( 18 ) ;
QLabel * proxy_ip_label = new QLabel ( tr ( " Proxy &IP: " ) ) ;
proxy_hbox - > addWidget ( proxy_ip_label ) ;
proxy_ip = new QLineEdit ( ) ;
proxy_ip - > setMaximumWidth ( 140 ) ;
proxy_ip - > setEnabled ( false ) ;
proxy_ip - > setValidator ( new QRegExpValidator ( QRegExp ( " [0-9]{1,3} \\ .[0-9]{1,3} \\ .[0-9]{1,3} \\ .[0-9]{1,3} " ) , this ) ) ;
proxy_ip_label - > setBuddy ( proxy_ip ) ;
proxy_hbox - > addWidget ( proxy_ip ) ;
QLabel * proxy_port_label = new QLabel ( tr ( " &Port: " ) ) ;
proxy_hbox - > addWidget ( proxy_port_label ) ;
proxy_port = new QLineEdit ( ) ;
proxy_port - > setMaximumWidth ( 55 ) ;
proxy_port - > setValidator ( new QIntValidator ( 0 , 65535 , this ) ) ;
proxy_port - > setEnabled ( false ) ;
proxy_port_label - > setBuddy ( proxy_port ) ;
proxy_hbox - > addWidget ( proxy_port ) ;
proxy_hbox - > addStretch ( 1 ) ;
layout - > addLayout ( proxy_hbox ) ;
QLabel * fee_help = new QLabel ( tr ( " Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended. " ) ) ;
fee_help - > setWordWrap ( true ) ;
layout - > addWidget ( fee_help ) ;
QHBoxLayout * fee_hbox = new QHBoxLayout ( ) ;
fee_hbox - > addSpacing ( 18 ) ;
QLabel * fee_label = new QLabel ( tr ( " Pay transaction &fee " ) ) ;
fee_hbox - > addWidget ( fee_label ) ;
fee_edit = new QLineEdit ( ) ;
fee_edit - > setMaximumWidth ( 70 ) ;
QDoubleValidator * amountValidator = new QDoubleValidator ( this ) ;
amountValidator - > setDecimals ( 8 ) ;
amountValidator - > setBottom ( 0.0 ) ;
fee_edit - > setValidator ( amountValidator ) ;
fee_label - > setBuddy ( fee_edit ) ;
fee_hbox - > addWidget ( fee_edit ) ;
fee_hbox - > addStretch ( 1 ) ;
layout - > addLayout ( fee_hbox ) ;
layout - > addStretch ( 1 ) ; /* Extra space at bottom */
setLayout ( layout ) ;
connect ( connect_socks4 , SIGNAL ( toggled ( bool ) ) , proxy_ip , SLOT ( setEnabled ( bool ) ) ) ;
connect ( connect_socks4 , SIGNAL ( toggled ( bool ) ) , proxy_port , SLOT ( setEnabled ( bool ) ) ) ;
}
void MainOptionsPage : : setMapper ( MonitoredDataMapper * mapper )
{
/* Map model to widgets */
mapper - > addMapping ( bitcoin_at_startup , OptionsModel : : StartAtStartup ) ;
mapper - > addMapping ( minimize_to_tray , OptionsModel : : MinimizeToTray ) ;
mapper - > addMapping ( map_port_upnp , OptionsModel : : MapPortUPnP ) ;
mapper - > addMapping ( minimize_on_close , OptionsModel : : MinimizeOnClose ) ;
mapper - > addMapping ( connect_socks4 , OptionsModel : : ConnectSOCKS4 ) ;
mapper - > addMapping ( proxy_ip , OptionsModel : : ProxyIP ) ;
mapper - > addMapping ( proxy_port , OptionsModel : : ProxyPort ) ;
mapper - > addMapping ( fee_edit , OptionsModel : : Fee ) ;
}