summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/confedit/listviewitemconf.h1
-rw-r--r--noncore/apps/confedit/listviewitemconffile.cpp30
-rw-r--r--noncore/apps/confedit/listviewitemconffile.h2
-rw-r--r--noncore/apps/confedit/mainwindow.cpp47
-rw-r--r--noncore/apps/confedit/mainwindow.h10
5 files changed, 71 insertions, 19 deletions
diff --git a/noncore/apps/confedit/listviewitemconf.h b/noncore/apps/confedit/listviewitemconf.h
index 5837625..c6e60ba 100644
--- a/noncore/apps/confedit/listviewitemconf.h
+++ b/noncore/apps/confedit/listviewitemconf.h
@@ -25,6 +25,7 @@ public:
int getType();
virtual void displayText() = 0;
virtual void changed();
+ bool isChanged() {return _changed;};
virtual void unchanged();
protected:
diff --git a/noncore/apps/confedit/listviewitemconffile.cpp b/noncore/apps/confedit/listviewitemconffile.cpp
index 858726d..b075063 100644
--- a/noncore/apps/confedit/listviewitemconffile.cpp
+++ b/noncore/apps/confedit/listviewitemconffile.cpp
@@ -73,9 +73,32 @@ void ListViewItemConfFile::parseFile()
}
}
confFile.close();
+ unchanged();
setExpandable( _valid );
}
+
+void ListViewItemConfFile::revert()
+{
+ if (_changed)
+ {
+ parseFile();
+ }else{
+ QString backup = confFileInfo->absFilePath()+"~";
+ QFile conf(confFileInfo->absFilePath());
+ QFile back(backup);
+
+ if (!back.open(IO_ReadOnly)) return;
+ if (!conf.open(IO_WriteOnly)) return;
+
+ #define SIZE 124
+ char buf[SIZE];
+ while (int c = back.readBlock(buf, SIZE) ) conf.writeBlock(buf,c);
+ conf.close();
+ back.close();
+ }
+}
+
void ListViewItemConfFile::save()
{
if (!_changed) return;
@@ -101,6 +124,11 @@ void ListViewItemConfFile::save()
((ListViewItemConfigEntry*)it)->save(t);
}
conf.close();
- qDebug("no saveing yet...");
unchanged();
}
+
+
+bool ListViewItemConfFile::revertable()
+{
+ return _changed || QFile(confFileInfo->absFilePath()+"~").exists();
+} \ No newline at end of file
diff --git a/noncore/apps/confedit/listviewitemconffile.h b/noncore/apps/confedit/listviewitemconffile.h
index d89b19c..ae23eab 100644
--- a/noncore/apps/confedit/listviewitemconffile.h
+++ b/noncore/apps/confedit/listviewitemconffile.h
@@ -25,7 +25,9 @@ public:
void parseFile();
QString fileName();
virtual void displayText();
+ bool revertable();
void save();
+ void revert();
protected:
private:
bool _valid;
diff --git a/noncore/apps/confedit/mainwindow.cpp b/noncore/apps/confedit/mainwindow.cpp
index 47d9518..77b91f6 100644
--- a/noncore/apps/confedit/mainwindow.cpp
+++ b/noncore/apps/confedit/mainwindow.cpp
@@ -38,9 +38,6 @@ MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) :
{
setCaption( tr("Conf File Editor") );
- popupTimer = new QTimer(this);
- popupMenu = new QPopupMenu(this);
-
QWidget *mainWidget = new QWidget(this);
setCentralWidget( mainWidget);
@@ -58,10 +55,6 @@ MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) :
connect(settingList, SIGNAL( pressed(QListViewItem*) ),
this, SLOT(setCurrent(QListViewItem*)));
- connect( popupTimer, SIGNAL(timeout()),
- this, SLOT(showPopup()) );
- connect( settingList, SIGNAL( clicked( QListViewItem* ) ),
- this, SLOT( stopTimer( QListViewItem* ) ) );
connect( editor->LineEditGroup, SIGNAL( textChanged(const QString&) ),
SLOT( groupChanged(const QString&) ) );
@@ -76,6 +69,22 @@ void MainWindow::makeMenu()
{
+ popupTimer = new QTimer(this);
+ popupMenuFile = new QPopupMenu(this);
+
+ popupActionSave = new QAction( tr("Save"),QString::null, 0, this, 0 );
+ popupActionSave->addTo( popupMenuFile );
+ connect( popupActionSave, SIGNAL( activated() ),
+ this , SLOT( saveConfFile() ) );
+ popupActionRevert = new QAction( tr("Revert"),QString::null, 0, this, 0 );
+ popupActionRevert->addTo( popupMenuFile );
+ connect( popupActionRevert, SIGNAL( activated() ),
+ this , SLOT( revertConfFile() ) );
+
+ connect( popupTimer, SIGNAL(timeout()),
+ this, SLOT(showPopup()) );
+ connect( settingList, SIGNAL( clicked( QListViewItem* ) ),
+ this, SLOT( stopTimer( QListViewItem* ) ) );
}
MainWindow::~MainWindow()
@@ -151,18 +160,22 @@ void MainWindow::saveConfFile()
_fileItem->save();
}
+void MainWindow::revertConfFile()
+{
+ if (!_fileItem) return;
+ _fileItem->revert();
+}
+
void MainWindow::showPopup()
{
qDebug("showPopup");
- if (!_fileItem) return;
- popupMenu->clear();
-
- QAction *popupAction;
- popupAction = new QAction( tr("Save"),QString::null, 0, this, 0 );
- popupAction->addTo( popupMenu );
- connect( popupAction, SIGNAL( activated() ),
- this , SLOT( saveConfFile() ) );
-
+ if (_fileItem)
+ {
+ popupActionSave->setEnabled(_fileItem->isChanged());
+ popupActionRevert->setEnabled(_fileItem->revertable());
+ popupMenuFile->popup( QCursor::pos() );
+ }else if(_currentItem->isChanged())
+ {
- popupMenu->popup( QCursor::pos() );
+ }
}
diff --git a/noncore/apps/confedit/mainwindow.h b/noncore/apps/confedit/mainwindow.h
index b015dac..e0dc0b0 100644
--- a/noncore/apps/confedit/mainwindow.h
+++ b/noncore/apps/confedit/mainwindow.h
@@ -41,6 +41,7 @@ public slots:
void showPopup();
void stopTimer( QListViewItem* );
void saveConfFile();
+ void revertConfFile();
private:
ListViewConfDir *settingList;
@@ -48,7 +49,14 @@ private:
ListViewItemConfigEntry *_currentItem;
ListViewItemConfFile *_fileItem;
QTimer *popupTimer;
- QPopupMenu *popupMenu;
+ QPopupMenu *popupMenuFile;
+ QPopupMenu *popupMenuEntry;
+ QAction *popupActionSave;
+ QAction *popupActionRevert;
+ QAction *popupActionDelete;
+ QAction *popupActionNew;
+// QAction *popupAction;
+// QAction *popupAction;
void makeMenu();
};