TemplateManagementDialog::TemplateManagementDialog(
  QWidget *parent, const QStringList &templates, const QString &type )
  : KDialog( parent ), m_templates( templates ), m_type( type ), m_changed( false )
{
  QString m_type_translated = i18n( qPrintable( m_type ) );
  setCaption( i18n( "Manage %1 Templates", m_type_translated ) );
  setButtons( Ok | Cancel | Help );
  setObjectName( "template_management_dialog" );
  setHelp( "entering-data-events-template-buttons", "korganizer" );
  QWidget *widget = new QWidget( this );
  widget->setObjectName( "template_management_dialog_base" );
  m_base.setupUi( widget );
  setMainWidget( widget );

  m_base.m_listBox->addItems( m_templates );
  m_base.m_listBox->setSelectionMode( QAbstractItemView::SingleSelection );

  connect( m_base.m_buttonAdd, SIGNAL(clicked()),
           SLOT(slotAddTemplate()) );
  connect( m_base.m_buttonRemove, SIGNAL(clicked()),
           SLOT(slotRemoveTemplate()) );
  connect( m_base.m_buttonApply, SIGNAL(clicked()),
           SLOT(slotApplyTemplate()) );

  connect( m_base.m_listBox, SIGNAL(itemSelectionChanged()),
           SLOT(slotItemSelected()) );
  connect( m_base.m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
           SLOT(slotApplyTemplate()) );
  connect( this, SIGNAL(okClicked()), SLOT(slotOk()) );

  m_base.m_buttonRemove->setEnabled( false );
  m_base.m_buttonApply->setEnabled( false );
}
void TemplateManagementDialog::slotAddTemplate()
{
  bool ok;
  bool duplicate = false;
  QString m_type_translated = i18n( qPrintable( m_type ) );
  const QString newTemplate = KInputDialog::getText(
    i18n( "Template Name" ),
    i18n( "Please enter a name for the new template:" ),
    i18n( "New %1 Template", m_type_translated ), &ok );
  if ( newTemplate.isEmpty() || !ok ) {
    return;
  }

  if ( m_templates.contains( newTemplate ) ) {
    int rc = KMessageBox::warningContinueCancel(
      this,
      i18n( "A template with that name already exists, do you want to overwrite it?" ),
      i18n( "Duplicate Template Name" ), KGuiItem( i18n( "Overwrite" ) ) );
    if ( rc == KMessageBox::Cancel ) {
      QTimer::singleShot( 0, this, SLOT(slotAddTemplate()) );
      return;
    }
    duplicate = true;
  }

  if ( !duplicate ) {
    int count = m_base.m_listBox->count();
    m_templates.append( newTemplate );
    m_base.m_listBox->addItem( newTemplate );
    QListWidgetItem *item = m_base.m_listBox->item( count );
    m_base.m_listBox->setItemSelected( item, true );
  }
  m_newTemplate = newTemplate;
  m_changed = true;

  // From this point on we need to keep the original event around until the
  // user has closed the dialog, applying a template would make little sense
  enableButtonApply( false );
  // neither does adding it again
  m_base.m_buttonAdd->setEnabled( false );
}
Example #3
0
SetupTemplate::SetupTemplate(QWidget* const parent)
    : QScrollArea(parent), d(new Private)
{
    QWidget* const panel = new QWidget(viewport());
    setWidget(panel);
    setWidgetResizable(true);

    const int spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);

    d->listView = new TemplateList(panel);
    d->listView->setFixedHeight(100);

    // --------------------------------------------------------

    QLabel* const label0 = new QLabel(i18n("Template Title:"), panel);
    d->titleEdit         = new QLineEdit(panel);
    d->titleEdit->setClearButtonEnabled(true);
    d->titleEdit->setPlaceholderText(i18n("Enter the metadata template title here."));
    d->titleEdit->setWhatsThis(i18n("<p>Enter the metadata template title here. This title will be "
                                    "used to identify a template in your collection.</p>"));
    label0->setBuddy(d->titleEdit);

    // --------------------------------------------------------

    d->tview = new TemplatePanel(panel);

    // --------------------------------------------------------

    QLabel* const note = new QLabel(i18n("<b>Note: These information are used to set "
                                   "<b><a href='http://en.wikipedia.org/wiki/Extensible_Metadata_Platform'>XMP</a></b> "
                                   "and <b><a href='http://en.wikipedia.org/wiki/IPTC'>IPTC</a></b> tag contents. "
                                   "There is no limitation with XMP, but note that IPTC text tags "
                                   "only support the printable <b><a href='http://en.wikipedia.org/wiki/Ascii'>ASCII</a></b> "
                                   "character set, and tag sizes are limited. "
                                   "Use contextual help for details.</b>"), panel);
    note->setOpenExternalLinks(true);
    note->setWordWrap(true);
    note->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);

    // -------------------------------------------------------------

    d->addButton = new QPushButton(panel);
    d->delButton = new QPushButton(panel);
    d->repButton = new QPushButton(panel);

    d->addButton->setText(i18n("&Add..."));
    d->addButton->setIcon(QIcon::fromTheme(QLatin1String("list-add")));
    d->delButton->setText(i18n("&Remove"));
    d->delButton->setIcon(QIcon::fromTheme(QLatin1String("list-remove")));
    d->repButton->setText(i18n("&Replace..."));
    d->repButton->setIcon(QIcon::fromTheme(QLatin1String("view-refresh")));
    d->delButton->setEnabled(false);
    d->repButton->setEnabled(false);

    // -------------------------------------------------------------

    QGridLayout* const grid = new QGridLayout;
    grid->setContentsMargins(spacing, spacing, spacing, spacing);
    grid->setSpacing(spacing);
    grid->setAlignment(Qt::AlignTop);
    grid->setColumnStretch(1, 10);
    grid->setRowStretch(4, 10);
    grid->addWidget(d->listView,  0, 0, 4, 2);
    grid->addWidget(d->addButton, 0, 2, 1, 1);
    grid->addWidget(d->delButton, 1, 2, 1, 1);
    grid->addWidget(d->repButton, 2, 2, 1, 1);
    grid->addWidget(label0,       4, 0, 1, 1);
    grid->addWidget(d->titleEdit, 4, 1, 1, 1);
    grid->addWidget(d->tview,     5, 0, 1, 3);
    grid->addWidget(note,         6, 0, 1, 3);
    panel->setLayout(grid);

    panel->setTabOrder(d->listView,  d->addButton);
    panel->setTabOrder(d->addButton, d->delButton);
    panel->setTabOrder(d->delButton, d->repButton);
    panel->setTabOrder(d->repButton, d->titleEdit);
    panel->setTabOrder(d->titleEdit, d->tview);

    // --------------------------------------------------------

    connect(d->listView, SIGNAL(itemSelectionChanged()),
            this, SLOT(slotSelectionChanged()));

    connect(d->addButton, SIGNAL(clicked()),
            this, SLOT(slotAddTemplate()));

    connect(d->delButton, SIGNAL(clicked()),
            this, SLOT(slotDelTemplate()));

    connect(d->repButton, SIGNAL(clicked()),
            this, SLOT(slotRepTemplate()));

    // --------------------------------------------------------

    readSettings();
    d->titleEdit->setFocus();
}