Example #1
0
/*! \brief Verifica se os dados atuais foram alterados e 
           viabiliza (ou não) troca de acordo com opção do usuário
           
Se os dados estiverem atualizados, retorna true.  Se não estiverem, 
pergunta ao usuário se deseja salvar as alterações, descartar as 
alterações ou cancelar a operação.

Processa a decisão do usuário.  Se uma tentativa de salvar os dados
for falha, cancela a operação.

\param restore Indica se os dados na tela devem ou não ser restaurados 
               se o usuário descartar as alterações.
\return O retorno da função indica se a operação de troca dos dados visualizados 
        deve (retorno true) ou não prosseguir (retorno false). 
*/
bool MainDialogTab::verifyAndEnableChange(bool restore)
{
  // Se os dados atuais na tela não foram modificados, nada a fazer
  if(!dataChanged())
    return true;

  // Dados modificados.  Pergunta ao usuário se deseja salvar 
  // alterações, abandonar alterações ou cancelar a seleção de 
  // nova regra
  QMessageBox::StandardButton answer;
  answer = QMessageBox::question(_parent, tr("Modificações não salvas!"),
                                 verifyAndEnableChangeMsg(),
                                 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,
                                 QMessageBox::Save);

  // Se a operação foi cancelada, basta retornar false
  if(answer == QMessageBox::Cancel)
    return false;
  
  // Se os dados foram descartados pelo usuário, chama 
  // discardChanges() e retorna true
  if(answer == QMessageBox::Discard)
  {
    discardChanges(restore);
    return true;
  }
 
  // Usuário pediu para tentarmos salvar os dados
  // Se operação Ok, retorna true, senão retorna false cancelando a operação
  return validateAndSaveChanges();
}
Example #2
0
KstEventMonitorI::KstEventMonitorI(QWidget* parent,
                                           const char* name,
                                           bool modal,
                                           WFlags fl) :
  EventMonitor(parent, name, modal, fl) {
  QStringList	labels;

  _bSetWidths = FALSE;
  
  labels.append(i18n("Log as:"));
  labels.append(i18n("Expression:"));
  labels.append(i18n("Description:"));
  
  tableEvents = new KstEventTable( this, "tableEvents" );
  tableEvents->setNumRows( 0 );
  tableEvents->setNumCols( 3 );
  tableEvents->setReadOnly( TRUE );
  tableEvents->setSorting( FALSE );     
  tableEvents->setRowMovingEnabled( FALSE );
  tableEvents->setColumnLabels( labels );
  tableEvents->setSelectionMode( QTable::SingleRow );
  tableEvents->setEventMonitors( &_eventMonitors );
  layoutGrid->addWidget( tableEvents, 1, 0 );

  connect(vectorSelector, SIGNAL(newVectorCreated(const QString&)), this, SIGNAL(modified()));
  connect(vectorSelectorEq, SIGNAL(newVectorCreated(const QString&)), this, SIGNAL(modified()));
  connect( scalarSelectorEq, SIGNAL( newScalarCreated() ), this, SIGNAL(modified()));
  connect( buttonGroupLog, SIGNAL( clicked(int) ), this, SLOT( logChanged(int) ) );
  connect( checkBoxDebug, SIGNAL(clicked()), this, SLOT(logCheckChanged()));
  connect( Close, SIGNAL( clicked() ), this, SLOT( close() ) );
  connect( pushButtonAdd, SIGNAL( clicked() ), this, SLOT( addEvent() ) );
  connect( pushButtonDelete, SIGNAL( clicked() ), this, SLOT( deleteEvent() ) );
  connect( pushButtonAccept, SIGNAL( clicked() ), this, SLOT( acceptChanges() ) );
  connect( pushButtonDiscard, SIGNAL( clicked() ), this, SLOT( discardChanges() ) );
  connect( lineEditEquation, SIGNAL( textChanged(const QString&) ), this, SLOT( expressionChanged(const QString&) ) );
  connect( lineEditDescription, SIGNAL( textChanged(const QString&) ), this, SLOT( descriptionChanged(const QString&) ) );
  connect( tableEvents, SIGNAL( currentChanged(int, int) ), this, SLOT( changedEvent(int, int) ) );
  connect( tableEvents, SIGNAL( selectionChanged() ), this, SLOT( changedSelection() ) );
  connect( vectorSelector, SIGNAL( selectionChanged(const QString&) ), this, SLOT( vectorChanged(const QString&) ) );
  connect( vectorSelector, SIGNAL( newVectorCreated(const QString&) ), this, SLOT( vectorChanged(const QString&) ) );
  connect( vectorSelectorEq, SIGNAL( selectionChangedLabel(const QString&)), lineEditEquation, SLOT( insert(const QString&) ) );
  connect( scalarSelectorEq, SIGNAL( selectionChangedLabel(const QString&)), lineEditEquation, SLOT( insert(const QString&) ) );
  connect( pushButtonApply, SIGNAL( clicked() ), this, SLOT( apply() ) );
    
  languageChange( );
  
  setChanged( FALSE );
}
TaskEditor::TaskEditor(Plasma::DataEngine* engine, QGraphicsWidget* parent)
  : QGraphicsWidget(parent),
  m_engine(engine),
  m_service(0)
{
  mainLayout = new QGraphicsGridLayout(this);
  nameEdit = new Plasma::LineEdit(this);
  dateEdit = new Plasma::LineEdit(this);
  tagsEdit = new Plasma::LineEdit(this);
  priorityEdit = new Plasma::ComboBox(this);
  completeBox = new Plasma::CheckBox(this);

  nameLabel = new Plasma::Label(this);
  nameLabel->setText(i18n("Name:"));
  dateLabel = new Plasma::Label(this);
  dateLabel->setText(i18n("Due:"));
  tagsLabel = new Plasma::Label(this);
  tagsLabel->setText(i18n("Tags:"));
  priorityLabel = new Plasma::Label(this);
  priorityLabel->setText(i18n("Priority:"));
  completeLabel = new Plasma::Label(this);
  completeLabel->setText(i18n("Complete:"));

  QStringList priorityStrings;
  priorityStrings << i18n("Top Priority") << i18n("Medium Priority") << i18n("Low Priority") << i18n("No Priority");
  priorityEdit->nativeWidget()->addItems(priorityStrings);

  saveChangesButton = new Plasma::PushButton(this);
  connect(saveChangesButton, SIGNAL(clicked()), this, SIGNAL(requestSaveChanges()));
  connect(saveChangesButton, SIGNAL(clicked()), this, SLOT(saveChanges()));
  discardChangesButton = new Plasma::PushButton(this);
  connect(discardChangesButton, SIGNAL(clicked()), this, SIGNAL(requestDiscardChanges()));
  connect(discardChangesButton, SIGNAL(clicked()), this, SLOT(discardChanges()));


  saveChangesButton->setText(i18n("Update Task"));
  saveChangesButton->nativeWidget()->setIcon(KIcon("dialog-ok-apply"));

  discardChangesButton->setText(i18n("Discard Changes"));
  discardChangesButton->nativeWidget()->setIcon(KIcon("dialog-cancel"));

  mainLayout->addItem(nameLabel, 0, 0);
  mainLayout->addItem(nameEdit, 0, 1);
  
  mainLayout->addItem(dateLabel, 1, 0);
  mainLayout->addItem(dateEdit, 1, 1);
  
  mainLayout->addItem(tagsLabel, 2, 0);
  mainLayout->addItem(tagsEdit, 2, 1);

  mainLayout->addItem(priorityLabel, 3, 0);
  mainLayout->addItem(priorityEdit, 3, 1);


  mainLayout->addItem(completeLabel, 4, 0);
  mainLayout->addItem(completeBox, 4, 1);
  
  //mainLayout->setColumnStretchFactor(2, 1);
  mainLayout->setRowStretchFactor(6, 1);

  mainLayout->addItem(saveChangesButton, 7, 0, 1, 2);
  mainLayout->addItem(discardChangesButton, 8, 0, 1, 2);

  setLayout(mainLayout);
}
Example #4
0
//! Slot chamado quando o usuário pressiona o botão de cancelar alterações
void MainDialogTab::cancelRequested()
{
  discardChanges(true);
}
int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string&)
{
	neutrino_msg_t      msg;
	neutrino_msg_data_t data;

	int res = menu_return::RETURN_REPAINT;

	if (parent)
	{
		parent->hide();
	}

// getting all bouquets from zapit
	Bouquets.clear();
	g_Zapit->getBouquets(Bouquets, true);
	paintHead();
	paint();
	paintFoot();

	bouquetsChanged = false;

	unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]);

	bool loop=true;
	while (loop)
	{
		g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd );
		neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat;

		if ( msg <= CRCInput::RC_MaxRC )
			timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]);

		if (msg == CRCInput::RC_timeout || msg == g_settings.key_channelList_cancel)
		{
			if (state == beDefault)
			{
				if (bouquetsChanged)
				{
					int result = ShowLocalizedMessage(LOCALE_BOUQUETEDITOR_NAME, LOCALE_BOUQUETEDITOR_SAVECHANGES, CMessageBox::mbrYes, CMessageBox::mbAll);

					switch( result )
					{
						case CMessageBox::mbrYes :
							loop=false;
							saveChanges();
						break;
						case CMessageBox::mbrNo :
							loop=false;
							discardChanges();
						break;
						case CMessageBox::mbrCancel :
							paintHead();
							paint();
							paintFoot();
						break;
					}
				}
				else
				{
					loop = false;
				}
			}
			else if (state == beMoving)
			{
				cancelMoveBouquet();
			}
		}
		//
		// -- For more convenience: include browsing of list (paging)  (rasc, 2002-04-02)
		// -- The keys should be configurable. Problem is: red/green key, which is the
		// -- default in neutrino is used as a function key here... so use left/right
		//
		else if (msg_repeatok==CRCInput::RC_up || msg_repeatok == g_settings.key_channelList_pageup)
		{
			if (!(Bouquets.empty()))
			{
				int step = 0;
				int prev_selected = selected;

				step = (msg_repeatok == g_settings.key_channelList_pageup) ? listmaxshow : 1;  // browse or step 1
				selected -= step;
				if((prev_selected-step) < 0)		// because of uint
				{
					selected = Bouquets.size()-1;
				}

				if (state == beDefault)
				{
					paintItem(prev_selected - liststart);
					unsigned int oldliststart = liststart;
					liststart = (selected/listmaxshow)*listmaxshow;
					if(oldliststart!=liststart)
					{
						paint();
					}
					else
					{
						paintItem(selected - liststart);
					}
				}
				else if (state == beMoving)
				{
					internalMoveBouquet(prev_selected, selected);
				}
			}
		}
		else if (msg_repeatok == CRCInput::RC_down || msg_repeatok == g_settings.key_channelList_pagedown)
		{
			unsigned int step = 0;
			int prev_selected = selected;

			step = (msg_repeatok == g_settings.key_channelList_pagedown) ? listmaxshow : 1;  // browse or step 1
			selected += step;

			if(selected >= Bouquets.size())
			{
				if (((Bouquets.size() / listmaxshow) + 1) * listmaxshow == Bouquets.size() + listmaxshow) // last page has full entries
					selected = 0;
				else
					selected = ((step == listmaxshow) && (selected < (((Bouquets.size() / listmaxshow) + 1) * listmaxshow))) ? (Bouquets.size() - 1) : 0;
			}


			if (state == beDefault)
			{
				paintItem(prev_selected - liststart);
				unsigned int oldliststart = liststart;
				liststart = (selected/listmaxshow)*listmaxshow;
				if(oldliststart!=liststart)
				{
					paint();
				}
				else
				{
					paintItem(selected - liststart);
				}
			}
			else if (state == beMoving)
			{
				internalMoveBouquet(prev_selected, selected);
			}
		}
		else if(msg==CRCInput::RC_red)
		{
			if (state == beDefault)
				deleteBouquet();
		}
		else if(msg==CRCInput::RC_green)
		{
			if (state == beDefault)
				addBouquet();
		}
		else if(msg==CRCInput::RC_yellow)
		{
			if (selected < Bouquets.size()) /* Bouquets.size() might be 0 */
			{
				liststart = (selected/listmaxshow)*listmaxshow;
				if (state == beDefault)
					beginMoveBouquet();
				paintItem(selected - liststart);
			}
		}
		else if(msg==CRCInput::RC_blue)
		{
			if (selected < Bouquets.size()) /* Bouquets.size() might be 0 */
			{
				if (state == beDefault)
					switch (blueFunction)
					{
					case beRename:
						renameBouquet();
						break;
					case beHide:
						switchHideBouquet();
						break;
					case beLock:
						switchLockBouquet();
						break;
					}
			}
		}
		else if(msg==CRCInput::RC_setup)
		{
			if (state == beDefault)
			switch (blueFunction)
			{
				case beRename:
					blueFunction = beHide;
				break;
				case beHide:
					blueFunction = beLock;
				break;
				case beLock:
					blueFunction = beRename;
				break;
			}
			paintFoot();
		}
		else if(msg==CRCInput::RC_ok)
		{
			if (state == beDefault)
			{
				if (selected < Bouquets.size()) /* Bouquets.size() might be 0 */
				{
					CBEChannelWidget* channelWidget = new CBEChannelWidget(Bouquets[selected].name, selected);
					channelWidget->exec( this, "");
					if (channelWidget->hasChanged())
						bouquetsChanged = true;
					delete channelWidget;
					paintHead();
					paint();
					paintFoot();
				}
			}
			else if (state == beMoving)
			{
				finishMoveBouquet();
			}
		}
		else if( CRCInput::isNumeric(msg) )
		{
			if (state == beDefault)
			{
				//kein pushback - wenn man versehentlich wo draufkommt is die edit-arbeit umsonst
				//selected = oldselected;
				//g_RCInput->postMsg( msg, data );
				//loop=false;
			}
			else if (state == beMoving)
			{
				cancelMoveBouquet();
			}
		}
		else
		{
			CNeutrinoApp::getInstance()->handleMsg( msg, data );
			// kein canceling...
		}
	}
	hide();
	return res;
}