MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
    content_uri_edit(new QLineEdit(this)),
    schema_uri_edit(new QLineEdit(this)),
    validation_result_browser(new QTextBrowser(this)),
    //: Validation button.
    validate_button(new QPushButton(tr("validate"), this)),
    settings("XmlSoft", "Schema_Validator")
{
    //: Application title.
    setWindowTitle(tr("Schema Validator"));
    setWindowIcon(QIcon(":/icons/schema_validator.png"));
    
    QWidget * central_widget = new QWidget(this);
    setCentralWidget(central_widget);

    QGridLayout * grid = new QGridLayout(central_widget);

    //: Content file selection label.
    grid->addWidget(new QLabel(tr("content:")), 0, 0);
    content_uri_edit->setReadOnly(true);
    connect(content_uri_edit, SIGNAL(textChanged(QString)), SLOT(slotUpdateButtonState()));
    grid->addWidget(content_uri_edit, 0, 1);
    //: Content file browse button text.
    QPushButton * browse_xml_button = new QPushButton(tr("browse"), this);
    connect(browse_xml_button, SIGNAL(clicked()), SLOT(slotBrowseContent()));
    grid->addWidget(browse_xml_button, 0, 2);

    //: Schema file selection label.
    grid->addWidget(new QLabel(tr("schema:")), 1, 0);
    schema_uri_edit->setReadOnly(true);
    connect(schema_uri_edit, SIGNAL(textChanged(QString)), SLOT(slotUpdateButtonState()));
    grid->addWidget(schema_uri_edit, 1, 1);
    //: Schema file browse button text.
    QPushButton * browse_xsd_button = new QPushButton(tr("browse"), this);
    connect(browse_xsd_button, SIGNAL(clicked()), SLOT(slotBrowseSchema()));
    grid->addWidget(browse_xsd_button, 1, 2);

    //: Result section title.
    grid->addWidget(new QLabel(tr("result:")), 2, 0);
    grid->addWidget(validation_result_browser, 2, 1);
    connect(validate_button, SIGNAL(clicked()), SLOT(slotValidateContent()));
    grid->addWidget(validate_button, 2, 2);
    
    xsd_schema.setMessageHandler(&message_handler);
    xsd_schema.load(QUrl("qrc:/schemas/XMLSchema.xsd"));
    assert(xsd_schema.isValid());
    
    readSettings();

    slotUpdateButtonState();
}
KMultiFormListBoxWindowed::KMultiFormListBoxWindowed(KMultiFormListBoxFactory *factory, TQWidget *parent,
																	 bool showUpDownButtons, bool showHelpButton,
																	 TQString addButtonText,const char *name)
  : TQWidget( parent, name )
{
  _layout = new TQVBoxLayout(this);

	TQHBoxLayout *innerLayout = new TQHBoxLayout();
	_layout->addLayout(innerLayout);

  _listbox = new TDEListBox(this,"listbox");
  _listbox->setSelectionMode(TQListBox::Single);
  innerLayout->addWidget(_listbox);

  TQVBoxLayout *buttons = new TQVBoxLayout();
  innerLayout->addLayout(buttons);

  TQPushButton *but = new TQPushButton(addButtonText, this,"Add Button");
  buttons->addWidget(but,0);
  connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(addNewElement()));

  but = new TQPushButton(i18n("Edit"), this,"Edit Button");
  buttons->addWidget(but,0);
  connect(but,TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditSelected()));
  connect(_listbox, TQT_SIGNAL(doubleClicked(TQListBoxItem *)), this, TQT_SLOT(slotEditSelected(TQListBoxItem *)));
	_buttonList.append(but);

  but = new TQPushButton(i18n("Delete"), this, "Delete Button");
  buttons->addWidget(but,0);
  connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDeleteEntry()));
	_buttonList.append(but);

  but = new TQPushButton(i18n("Copy"), this, "Copy Button");
  buttons->addWidget(but,0);
  connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotCopySelected()));
	_buttonList.append(but);

	if (showUpDownButtons) {
		but = new TQPushButton(i18n("Up"), this, "Up Button");
		buttons->addWidget(but, 0);
		connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotMoveItemUp()));
		_buttonList.append(but);

		but = new TQPushButton(i18n("Down"), this, "Down Button");
		buttons->addWidget(but, 0);
		connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotMoveItemDown()));
		_buttonList.append(but);
	}

	if (showHelpButton) {
		but = new KPushButton(KStdGuiItem::help(), this, "Help Button");
		buttons->addWidget(but, 0);
		connect(but, TQT_SIGNAL(clicked()), this, TQT_SIGNAL(showHelp()));
	}

  buttons->addStretch(1);
  _factory = factory;
	slotUpdateButtonState();

}
void KMultiFormListBoxWindowed::addNewElement()
{
	// kdDebug() << "addNewElement " << _factory << "," << _listbox << endl;

  TQWidget *widget = new WidgetWindow(_factory, _listbox);
	widget->show();
	connect(widget, TQT_SIGNAL(finished()), this, TQT_SLOT(slotUpdateButtonState()));
}
void KMultiFormListBoxWindowed::slotDeleteEntry()
{
  WindowListboxItem *item = selected();
  if (item) {
		int answer =
			KMessageBox::warningContinueCancel(0, i18n("Delete item \"%1\"?").arg(item->text()),i18n("Delete Item"),KStdGuiItem::del());
		if (answer == KMessageBox::Continue) {
			delete item;
			slotUpdateButtonState();
		}
  }
}
void KMultiFormListBoxWindowed::addElement()
{
  new WidgetWindow(_factory, _listbox);
	slotUpdateButtonState();
}
void KMultiFormListBoxWindowed::append(KMultiFormListBoxEntry *elm)
{
  (void) new WidgetWindow(_factory, elm, _listbox);
	slotUpdateButtonState();
}
KMultiFormListBoxWindowed::KMultiFormListBoxWindowed(KMultiFormListBoxFactory *factory, QWidget *parent,
																	 bool showUpDownButtons, bool showHelpButton,
																	 QString addButtonText)
  : QWidget( parent )
{
  _layout = new QVBoxLayout(this);

	QHBoxLayout *innerLayout = new QHBoxLayout();
	_layout->addLayout(innerLayout);

  _listbox = new KListWidget(this/*,"listbox"*/);
  _listbox->setSelectionMode(QAbstractItemView::SingleSelection);
  innerLayout->addWidget(_listbox);

  QVBoxLayout *buttons = new QVBoxLayout();
  innerLayout->addLayout(buttons);

  KPushButton *but = new KPushButton(addButtonText, this);
  but->setObjectName("Add Button");
  buttons->addWidget(but,0);
  connect(but, SIGNAL(clicked()), this, SLOT(addNewElement()));

  but = new KPushButton(i18n("Edit"), this);
  but->setObjectName("Edit Button");
  buttons->addWidget(but,0);
  connect(but,SIGNAL(clicked()), this, SLOT(slotEditSelected()));
  connect(_listbox, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotEditSelected(QListWidgetItem *)));
	_buttonList.append(but);

  but = new KPushButton(i18n("Delete"), this);
  but->setObjectName("Delete Button");
  buttons->addWidget(but,0);
  connect(but, SIGNAL(clicked()), this, SLOT(slotDeleteEntry()));
	_buttonList.append(but);

  but = new KPushButton(i18n("Copy"), this);
  but->setObjectName("Copy Button");
  buttons->addWidget(but,0);
  connect(but, SIGNAL(clicked()), this, SLOT(slotCopySelected()));
	_buttonList.append(but);

	if (showUpDownButtons) {
		but = new KPushButton(i18n("Up"), this);
		but->setObjectName("Up Button");
		buttons->addWidget(but, 0);
		connect(but, SIGNAL(clicked()), this, SLOT(slotMoveItemUp()));
		_buttonList.append(but);

		but = new KPushButton(i18n("Down"), this);
		but->setObjectName( "Down Button");
		buttons->addWidget(but, 0);
		connect(but, SIGNAL(clicked()), this, SLOT(slotMoveItemDown()));
		_buttonList.append(but);
	}

	if (showHelpButton) {
		but = new KPushButton(KStandardGuiItem::help(), this);
		but->setObjectName( "Help Button");
		buttons->addWidget(but, 0);
		connect(but, SIGNAL(clicked()), this, SIGNAL(showHelp()));
	}

  buttons->addStretch(1);
  _factory = factory;
	slotUpdateButtonState();

}