• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • lib
  • marble
  • cloudsync
ConflictDialog.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2013 Utku Aydın <utkuaydin34@gmail.com>
9 //
10 
11 #include "ConflictDialog.h"
12 
13 #include "MergeItem.h"
14 #include "GeoDataPlacemark.h"
15 
16 #include <QLabel>
17 #include <QVariant>
18 #include <QPushButton>
19 #include <QHBoxLayout>
20 #include <QVBoxLayout>
21 
22 namespace Marble {
23 
24 ConflictDialog::ConflictDialog( QWidget *parent ) :
25  QDialog( parent ),
26  m_mergeItem( 0 ),
27  m_box( 0 )
28 {
29  m_resolveAction = ConflictDialog::AskUser;
30 }
31 
32 void ConflictDialog::setMergeItem( MergeItem *item )
33 {
34  m_mergeItem = item;
35 }
36 
37 void ConflictDialog::stopAutoResolve()
38 {
39  m_resolveAction = ConflictDialog::AskUser;
40 }
41 
42 void ConflictDialog::open()
43 {
44  if( m_mergeItem == 0 ) {
45  return;
46  }
47 
48  switch( m_resolveAction ) {
49  case ConflictDialog::AskUser:
50  prepareLayout();
51  QDialog::open();
52  break;
53  case ConflictDialog::PreferLocal:
54  m_mergeItem->setResolution( MergeItem::A );
55  emit resolveConflict( m_mergeItem );
56  break;
57  case ConflictDialog::PreferCloud:
58  m_mergeItem->setResolution( MergeItem::B );
59  emit resolveConflict( m_mergeItem );
60  break;
61  }
62 }
63 
64 void ConflictDialog::resolveConflict( QAbstractButton *button )
65 {
66  accept();
67 
68  QDialogButtonBox::StandardButton standardButton = m_box->standardButton( button );
69  switch(standardButton) {
70  case QDialogButtonBox::NoButton:
71  {
72  int actionRole = button->property( "ActionRole" ).toInt();
73  switch( actionRole ) {
74  case ConflictDialog::Local:
75  m_mergeItem->setResolution( MergeItem::A );
76  emit resolveConflict( m_mergeItem );
77  break;
78  case ConflictDialog::Cloud:
79  m_mergeItem->setResolution( MergeItem::B );
80  emit resolveConflict( m_mergeItem );
81  break;
82  case ConflictDialog::AllLocal:
83  m_mergeItem->setResolution( MergeItem::A );
84  m_resolveAction = ConflictDialog::PreferLocal;
85  emit resolveConflict( m_mergeItem );
86  break;
87  case ConflictDialog::AllCloud:
88  m_mergeItem->setResolution( MergeItem::B );
89  m_resolveAction = ConflictDialog::PreferCloud;
90  emit resolveConflict( m_mergeItem );
91  break;
92  default:
93  break;
94  }
95  }
96 
97  default:
98  break;
99  }
100 }
101 
102 void ConflictDialog::prepareLayout()
103 {
104  delete layout();
105  qDeleteAll( children() );
106  m_box = new QDialogButtonBox( QDialogButtonBox::Cancel );
107 
108  QPushButton *localButton = new QPushButton( tr( "Use local" ) );
109  QPushButton *cloudButton = new QPushButton( tr( "Use cloud" ) );
110  QPushButton *allLocalButton = new QPushButton( tr( "Always use local" ) );
111  QPushButton *allCloudButton = new QPushButton( tr( "Always use cloud" ) );
112 
113  localButton->setDefault( true );
114  localButton->setProperty( "ActionRole", ConflictDialog::Local );
115  cloudButton->setProperty( "ActionRole", ConflictDialog::Cloud );
116  allLocalButton->setProperty( "ActionRole", ConflictDialog::AllLocal );
117  allCloudButton->setProperty( "ActionRole", ConflictDialog::AllCloud );
118 
119  m_box->addButton( localButton, QDialogButtonBox::ActionRole );
120  m_box->addButton( cloudButton, QDialogButtonBox::ActionRole );
121  m_box->addButton( allLocalButton, QDialogButtonBox::ActionRole );
122  m_box->addButton( allCloudButton, QDialogButtonBox::ActionRole );
123 
124  QVBoxLayout *leftLayout = new QVBoxLayout();
125  QString localHeaderText = tr( "Local placemark" );
126  QString localDetailText = tr( "Path: %0 <br /> Name: %1 <br /> Description: %2 <br /> Status: %3" )
127  .arg( m_mergeItem->pathA(), m_mergeItem->nameA(), m_mergeItem->descriptionA() );
128  switch( m_mergeItem->actionA() ) {
129  case MergeItem::Changed:
130  localDetailText = localDetailText.arg( tr( "Changed" ) );
131  break;
132  case MergeItem::Deleted:
133  localDetailText = localDetailText.arg( tr( "Deleted" ) );
134  break;
135  default:
136  break;
137  }
138 
139  QLabel *localHeaderLabel = new QLabel( localHeaderText );
140  QLabel *localDetailLabel = new QLabel( localDetailText );
141  leftLayout->addWidget( localHeaderLabel );
142  leftLayout->addWidget( localDetailLabel );
143 
144  QVBoxLayout *rightLayout = new QVBoxLayout();
145  QString cloudHeaderText = tr( "Cloud placemark" );
146  QString cloudDetailText = tr( "Path: %0 <br /> Name: %1 <br /> Description: %2 <br /> Status: %3" )
147  .arg( m_mergeItem->pathB(), m_mergeItem->nameB(), m_mergeItem->descriptionB() );
148  switch( m_mergeItem->actionB() ) {
149  case MergeItem::Changed:
150  cloudDetailText = cloudDetailText.arg( tr( "Changed" ) );
151  break;
152  case MergeItem::Deleted:
153  cloudDetailText = cloudDetailText.arg( tr( "Deleted" ) );
154  break;
155  default:
156  break;
157  }
158  QLabel *cloudHeaderLabel = new QLabel( cloudHeaderText );
159  QLabel *cloudDetailLabel = new QLabel( cloudDetailText );
160  rightLayout->addWidget( cloudHeaderLabel );
161  rightLayout->addWidget( cloudDetailLabel );
162 
163  QHBoxLayout *detailLayout = new QHBoxLayout();
164  detailLayout->addLayout( leftLayout );
165  detailLayout->addLayout( rightLayout );
166 
167  QLabel *descriptionLabel = new QLabel();
168  QString descriptionText = tr( "A bookmark on this device conflicts " \
169  "with a cloud bookmark. Which one do " \
170  "you want to keep?" );
171  descriptionLabel->setText( descriptionText );
172 
173  QVBoxLayout *mainLayout = new QVBoxLayout();
174  mainLayout->addWidget( descriptionLabel );
175  mainLayout->addLayout( detailLayout );
176  mainLayout->addWidget( m_box );
177 
178  setLayout( mainLayout );
179  setWindowTitle( tr( "Synchronization Conflict" ) );
180 
181  connect( m_box, SIGNAL(clicked(QAbstractButton*)),
182  this, SLOT(resolveConflict(QAbstractButton*)) );
183 }
184 
185 }
186 
187 #include "ConflictDialog.moc"
QAbstractButton
Marble::ConflictDialog::stopAutoResolve
void stopAutoResolve()
Definition: ConflictDialog.cpp:37
Marble::ConflictDialog::Local
Definition: ConflictDialog.h:28
QDialog
Marble::ConflictDialog::PreferLocal
Definition: ConflictDialog.h:36
Marble::MergeItem::pathB
QString pathB
Definition: MergeItem.h:32
Marble::ConflictDialog::Cloud
Definition: ConflictDialog.h:29
QWidget
Marble::MergeItem::B
Definition: MergeItem.h:46
Marble::MergeItem::actionA
MergeItem::Action actionA
Definition: MergeItem.h:39
Marble::ConflictDialog::PreferCloud
Definition: ConflictDialog.h:37
Marble::MergeItem::actionB
MergeItem::Action actionB
Definition: MergeItem.h:40
Marble::MergeItem::setResolution
void setResolution(MergeItem::Resolution resolution)
Definition: MergeItem.cpp:114
Marble::MergeItem::descriptionB
QString descriptionB
Definition: MergeItem.h:38
Marble::ConflictDialog::AskUser
Definition: ConflictDialog.h:35
Marble::ConflictDialog::setMergeItem
void setMergeItem(MergeItem *item)
Definition: ConflictDialog.cpp:32
Marble::MergeItem::Deleted
Definition: MergeItem.h:51
GeoDataPlacemark.h
Marble::MergeItem
Definition: MergeItem.h:23
ConflictDialog.h
Marble::MergeItem::Changed
Definition: MergeItem.h:50
Marble::ConflictDialog::open
void open()
Definition: ConflictDialog.cpp:42
Marble::MergeItem::nameA
QString nameA
Definition: MergeItem.h:35
MergeItem.h
Marble::ConflictDialog::AllCloud
Definition: ConflictDialog.h:31
Marble::MergeItem::pathA
QString pathA
Definition: MergeItem.h:31
Marble::ConflictDialog::resolveConflict
void resolveConflict(MergeItem *mergeItem)
Marble::ConflictDialog::ConflictDialog
ConflictDialog(QWidget *parent=0)
Definition: ConflictDialog.cpp:24
Marble::MergeItem::descriptionA
QString descriptionA
Definition: MergeItem.h:37
Marble::MergeItem::A
Definition: MergeItem.h:45
Marble::ConflictDialog::AllLocal
Definition: ConflictDialog.h:30
Marble::MergeItem::nameB
QString nameB
Definition: MergeItem.h:36
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:49 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal