summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-02-24 07:39:56 (UTC)
committer llornkcor <llornkcor>2002-02-24 07:39:56 (UTC)
commitf7be370d10a69cfe78b04687fe728b32d566083a (patch) (side-by-side diff)
tree6e586d6543cfd3a60e9734b515642bd86fc052cd
parentf1c800025cf759ca0d6257a42f548216d217b16b (diff)
downloadopie-f7be370d10a69cfe78b04687fe728b32d566083a.zip
opie-f7be370d10a69cfe78b04687fe728b32d566083a.tar.gz
opie-f7be370d10a69cfe78b04687fe728b32d566083a.tar.bz2
added file permissions dialog
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/textedit/filePermissions.cpp274
-rw-r--r--core/apps/textedit/filePermissions.h56
-rw-r--r--core/apps/textedit/fileSaver.cpp8
-rw-r--r--core/apps/textedit/fileSaver.h2
-rw-r--r--core/apps/textedit/opie-textedit.control2
-rw-r--r--core/apps/textedit/textedit.cpp75
-rw-r--r--core/apps/textedit/textedit.pro4
7 files changed, 387 insertions, 34 deletions
diff --git a/core/apps/textedit/filePermissions.cpp b/core/apps/textedit/filePermissions.cpp
new file mode 100644
index 0000000..1938b84
--- a/dev/null
+++ b/core/apps/textedit/filePermissions.cpp
@@ -0,0 +1,274 @@
+/****************************************************************************
+** copyright 2002 ljp ljp@llornkcor.com
+** Created: Sat Feb 23 19:44:40 2002 L.J. Potter
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#include "filePermissions.h"
+
+#include <qfile.h>
+#include <qfileinfo.h>
+
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qmessagebox.h>
+
+#include <unistd.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+
+filePermissions::filePermissions( QWidget* parent, const char* name, bool modal, WFlags fl, const QString &fileName )
+ : QDialog( parent, name, modal, fl )
+{
+ if ( !name )
+ setName( "filePermissions" );
+ qDebug("FilePermissions "+fileName);
+ resize( 236, 210 );
+ setMaximumSize( QSize( 236, 210 ) );
+ setCaption( tr( "Set File Permissions" ) );
+
+ TextLabel1 = new QLabel( this, "TextLabel1" );
+ TextLabel1->setGeometry( QRect( 25, 5, 175, 20 ) );
+ TextLabel1->setText( tr( "Set file permissions for:" ) );
+
+ LineEdit1 = new QLineEdit( this, "LineEdit1" );
+ LineEdit1->setGeometry( QRect( 10, 25, 218, 22 ) );
+ LineEdit1->setReadOnly(true);
+
+ TextLabel4 = new QLabel( this, "TextLabel4" );
+ TextLabel4->setGeometry( QRect( 5, 85, 50, 15 ) );
+ TextLabel4->setText( tr( "owner" ) );
+
+ TextLabel4_2 = new QLabel( this, "TextLabel4_2" );
+ TextLabel4_2->setGeometry( QRect( 5, 105, 50, 15 ) );
+ TextLabel4_2->setText( tr( "group" ) );
+
+ TextLabel4_3 = new QLabel( this, "TextLabel4_3" );
+ TextLabel4_3->setGeometry( QRect( 5, 125, 50, 15 ) );
+ TextLabel4_3->setText( tr( "others" ) );
+
+ CheckBox1 = new QCheckBox( this, "CheckBox1" );
+ CheckBox1->setGeometry( QRect( 75, 85, 20, 16 ) );
+ connect(CheckBox1, SIGNAL(released()),this,SLOT(ownReadCheck()));
+
+ CheckBox1_2 = new QCheckBox( this, "CheckBox1_2" );
+ CheckBox1_2->setGeometry( QRect( 135, 85, 20, 16 ) );
+ connect(CheckBox1_2, SIGNAL(released()),this,SLOT(ownWriteCheck()));
+
+ CheckBox1_3 = new QCheckBox( this, "CheckBox1_3" );
+ CheckBox1_3->setGeometry( QRect( 195, 85, 20, 16 ) );
+ connect(CheckBox1_3, SIGNAL(released()),this,SLOT(ownExeCheck()));
+
+ CheckBox1_4 = new QCheckBox( this, "CheckBox1_4" );
+ CheckBox1_4->setGeometry( QRect( 75, 105, 20, 16 ) );
+ connect(CheckBox1_4, SIGNAL(released()),this,SLOT(grpReadCheck()));
+
+ CheckBox1_5 = new QCheckBox( this, "CheckBox1_5" );
+ CheckBox1_5->setGeometry( QRect( 135, 105, 20, 16 ) );
+ connect(CheckBox1_5, SIGNAL(released()),this,SLOT(grpWriteCheck()));
+
+ CheckBox1_6 = new QCheckBox( this, "CheckBox1_6" );
+ CheckBox1_6->setGeometry( QRect( 195, 105, 20, 16 ) );
+ connect(CheckBox1_6, SIGNAL(released()),this,SLOT(grpExeCheck()));
+
+ CheckBox1_7 = new QCheckBox( this, "CheckBox1_7" );
+ CheckBox1_7->setGeometry( QRect( 75, 125, 16, 16 ) );
+ connect(CheckBox1_7, SIGNAL(released()),this,SLOT(wrldReadCheck()));
+
+ CheckBox1_8 = new QCheckBox( this, "CheckBox1_8" );
+ CheckBox1_8->setGeometry( QRect( 135, 125, 20, 16 ) );
+ connect(CheckBox1_8, SIGNAL(released()),this,SLOT(wrldWriteCheck()));
+
+ CheckBox1_8_2 = new QCheckBox( this, "CheckBox1_8_2" );
+ CheckBox1_8_2->setGeometry( QRect( 195, 125, 20, 16 ) );
+ connect(CheckBox1_8_2, SIGNAL(released()),this,SLOT(wrldExeCheck()));
+
+ GroupLineEdit = new QLineEdit( this, "GroupLineEdit" );
+ GroupLineEdit->setGeometry( QRect( 125, 155, 106, 22 ) );
+
+ OwnerLineEdit = new QLineEdit( this, "OwnerLineEdit" );
+ OwnerLineEdit->setGeometry( QRect( 10, 155, 106, 22 ) );
+
+ TextLabel5 = new QLabel( this, "TextLabel5" );
+ TextLabel5->setGeometry( QRect( 45, 180, 40, 16 ) );
+ TextLabel5->setText( tr( "Owner" ) );
+
+ TextLabel5_2 = new QLabel( this, "TextLabel5_2" );
+ TextLabel5_2->setGeometry( QRect( 155, 180, 40, 16 ) );
+ TextLabel5_2->setText( tr( "Group" ) );
+
+ ModeLine = new QLineEdit( this, "TextLabelMode" );
+ ModeLine->setGeometry( QRect( 10, 60, 40, 15 ) );
+
+ TextLabel3_2 = new QLabel( this, "TextLabel3_2" );
+ TextLabel3_2->setGeometry( QRect( 60, 55, 50, 20 ) );
+ TextLabel3_2->setText( tr( "read" ) );
+ TextLabel3_2->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ TextLabel3_2_2 = new QLabel( this, "TextLabel3_2_2" );
+ TextLabel3_2_2->setGeometry( QRect( 120, 55, 50, 20 ) );
+ TextLabel3_2_2->setText( tr( "write" ) );
+ TextLabel3_2_2->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ TextLabel3 = new QLabel( this, "TextLabel3" );
+ TextLabel3->setGeometry( QRect( 180, 55, 50, 20 ) );
+ TextLabel3->setText( tr( "execute" ) );
+ TextLabel3->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ struct stat buf;
+ mode_t mode;
+ file = fileName;
+ QFileInfo fi(file);
+
+ LineEdit1->setText( file);
+ OwnerLineEdit->setText( fi.owner());
+ GroupLineEdit->setText( fi.group());
+
+ if( fi.permission( QFileInfo::ReadUser)) { CheckBox1->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteUser)) { CheckBox1_2->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeUser)) { CheckBox1_3->setChecked(true); }
+
+ if( fi.permission( QFileInfo::ReadGroup)) { CheckBox1_4->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteGroup)) { CheckBox1_5->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeGroup)) { CheckBox1_6->setChecked(true); }
+
+ if( fi.permission( QFileInfo::ReadOther)) { CheckBox1_7->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteOther)) { CheckBox1_8->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeOther)) { CheckBox1_8_2->setChecked(true); }
+
+ lstat(file.latin1(), &buf);
+ mode = buf.st_mode;
+ modeStr.sprintf("%#o", buf.st_mode & ~(S_IFMT) );
+ ModeLine->setText(modeStr);
+ bool ok;
+ i_mode = modeStr.toInt(&ok,10);
+
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+filePermissions::~filePermissions()
+{
+}
+
+
+// might this be better as a callback routine???
+void filePermissions::ownReadCheck() {
+ if(CheckBox1->isChecked()) { i_mode +=400; }
+ else i_mode -=400;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText( modeStr);
+// 0400
+}
+
+void filePermissions::ownWriteCheck() {
+ if(CheckBox1_2->isChecked()) { i_mode +=200; }
+ else i_mode -=200;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0200
+}
+
+void filePermissions::ownExeCheck() {
+ if(CheckBox1_3->isChecked()) { i_mode +=100; }
+ else i_mode -=100;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0100
+}
+
+void filePermissions::grpReadCheck() {
+ if(CheckBox1_4->isChecked()) { i_mode +=40; }
+ else i_mode -=40;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0040
+}
+
+void filePermissions::grpWriteCheck() {
+ if(CheckBox1_5->isChecked()) { i_mode +=20; }
+ else i_mode -=20;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0020
+}
+
+void filePermissions::grpExeCheck() {
+ if(CheckBox1_6->isChecked()) { i_mode +=10; }
+ else i_mode -=10;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0010
+}
+
+void filePermissions::wrldReadCheck() {
+ if(CheckBox1_7->isChecked()) { i_mode +=4; }
+ else i_mode -=4;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0004
+}
+
+void filePermissions::wrldWriteCheck() {
+ if(CheckBox1_8->isChecked()) { i_mode +=2; }
+ else i_mode -=2;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0002
+}
+
+void filePermissions::wrldExeCheck() {
+ if(CheckBox1_8_2->isChecked()) { i_mode +=1; }
+ else i_mode -=1;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0001
+}
+
+void filePermissions::accept() {
+
+ QFileInfo fi(file);
+ struct passwd *pwd=0;
+ struct group *grp=0;
+ pwd = getpwnam(OwnerLineEdit->text().latin1() );
+ if(pwd == NULL) {
+ perror("getpwnam");
+ QMessageBox::warning(this,"Warning","Error- no user");
+ return;
+ } else {
+ grp = getgrnam(GroupLineEdit->text().latin1());
+ if(grp==NULL) {
+ perror("getgrnam");
+ QMessageBox::warning(this,"Warning","Error- no group");
+ return;
+ }
+ if( chown( file.latin1(), pwd->pw_uid, grp->gr_gid) <0) {
+ perror("chown");
+ QMessageBox::warning(this,"Warning","Error setting ownership or group");
+ return;
+ }
+ bool ok;
+ uint moder = modeStr.toUInt(&ok,8);
+ if( chmod( file.latin1(), moder) < 0) {
+ perror("chmod");
+ QMessageBox::warning(this,"Warning","Error setting mode");
+ return;
+ }
+ }
+ close();
+}
diff --git a/core/apps/textedit/filePermissions.h b/core/apps/textedit/filePermissions.h
new file mode 100644
index 0000000..880304f
--- a/dev/null
+++ b/core/apps/textedit/filePermissions.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+** copyright 2002 ljp ljp@llornkcor.com
+** Created: Sat Feb 23 19:44:17 2002
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#ifndef FILEPERMISSIONS_H
+#define FILEPERMISSIONS_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QCheckBox;
+class QLabel;
+class QLineEdit;
+class QString;
+
+class filePermissions : public QDialog
+{
+ Q_OBJECT
+
+public:
+ filePermissions( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 , const QString & fileName ="");
+ ~filePermissions();
+
+ QLineEdit *LineEdit1, *ModeLine;
+ QLabel *TextLabel1, *TextLabel4, *TextLabel4_2, *TextLabel4_3, *TextLabel3_2_2, *TextLabel3_2, *TextLabel3, *TextLabel5_2, *TextLabel5;
+ QCheckBox*CheckBox1, *CheckBox1_3, *CheckBox1_2, *CheckBox1_4, *CheckBox1_5, *CheckBox1_6, *CheckBox1_7, *CheckBox1_8, *CheckBox1_8_2;
+ QLineEdit*GroupLineEdit, *OwnerLineEdit;
+ QString modeStr, file;
+ int i_mode;
+private slots:
+ void ownReadCheck();
+ void ownWriteCheck();
+ void ownExeCheck();
+
+ void grpReadCheck();
+ void grpWriteCheck();
+ void grpExeCheck();
+
+ void wrldReadCheck();
+ void wrldWriteCheck();
+ void wrldExeCheck();
+ void accept();
+};
+
+#endif // FILEPERMISSIONS_H
diff --git a/core/apps/textedit/fileSaver.cpp b/core/apps/textedit/fileSaver.cpp
index b813ed3..9e9e863 100644
--- a/core/apps/textedit/fileSaver.cpp
+++ b/core/apps/textedit/fileSaver.cpp
@@ -1,106 +1,110 @@
/****************************************************************************
** copyright 2001 ljp ljp@llornkcor.com
** Created: Fri Dec 14 08:16:46 2001 fileSaver.cpp
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#include "fileSaver.h"
#include <qpe/config.h>
#include <qpe/qpeapplication.h>
-
#include <qlistview.h>
#include <qpushbutton.h>
#include <qfile.h>
#include <qmessagebox.h>
-#include <unistd.h>
#include <qlineedit.h>
+#include <qcheckbox.h>
+
+#include <unistd.h>
fileSaver::fileSaver( QWidget* parent, const char* name, bool modal, WFlags fl , const QString currentFileName )
: QDialog( parent, name, modal, fl )
{
if ( !name )
setName( "fileSaver" );
resize( 236, 280 );
setCaption(tr( "Save file" ) );
QFileInfo fi(currentFileName);
QString tmpFileName=fi.fileName();
// qDebug( tmpFileName);
dirLabel = new QLabel(this, "DirLabel");
dirLabel->setText(currentDir.canonicalPath());
dirLabel->setGeometry(10,4,230,30);
ListView = new QListView( this, "ListView" );
ListView->addColumn( tr( "Name" ) );
ListView->setColumnWidth(0,140);
ListView->setSorting( 2, FALSE);
ListView->addColumn( tr( "Size" ) );
ListView->setColumnWidth(1,59);
ListView->setColumnWidthMode(0,QListView::Manual);
ListView->setColumnAlignment(1,QListView::AlignRight);
// ListView->setMultiSelection(true);
// ListView->setSelectionMode(QListView::Extended);
ListView->setAllColumnsShowFocus( TRUE );
ListView->setGeometry( QRect( 10, 35, 220, 160 ) );
fileEdit= new QLineEdit(this);
fileEdit->setGeometry( QRect( 10, 200, 200, 22));
fileEdit->setText( tmpFileName);
+ filePermCheck = new QCheckBox( this, "SetFilePerms" );
+ filePermCheck->setText("set file permissions");
+ filePermCheck->setGeometry(10, 220, 150,22);
// signals and slots connections
connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) );
connect( ListView, SIGNAL(pressed( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
// tmpFileName=fi.FilePath();
// qDebug( tmpFileName);
currentDir.setPath( QDir::currentDirPath() );
populateList();
}
fileSaver::~fileSaver()
{
}
void fileSaver::populateList()
{
ListView->clear();
currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden );
currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
currentDir.setMatchAllDirs(TRUE);
currentDir.setNameFilter("*");
QString fileL, fileS;
const QFileInfoList *list = currentDir.entryInfoList(QDir::All /*, QDir::SortByMask*/);
QFileInfoListIterator it(*list);
QFileInfo *fi;
while ( (fi=it.current()) ) {
if (fi->isSymLink() ){
QString symLink=fi->readLink();
// qDebug("Symlink detected "+symLink);
QFileInfo sym( symLink);
fileS.sprintf( "%10li", sym.size() );
fileL.sprintf( "%s -> %s", sym.fileName().data(),sym.absFilePath().data() );
} else {
// // qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
fileS.sprintf( "%10li", fi->size() );
fileL.sprintf( "%s",fi->fileName().data() );
if( QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+fileL)).exists() ) {
fileL+="/";
// qDebug(currentDir.canonicalPath()+fileL);
}
}
item= new QListViewItem( ListView,fileL,fileS );
++it;
}
diff --git a/core/apps/textedit/fileSaver.h b/core/apps/textedit/fileSaver.h
index 4a38a65..ce4493e 100644
--- a/core/apps/textedit/fileSaver.h
+++ b/core/apps/textedit/fileSaver.h
@@ -1,72 +1,74 @@
/****************************************************************************
**
** Created: Fri Dec 14 08:16:02 2001 fileSaver.h
**
copyright Sun 02-17-2002 22:28:48 L. J. Potter ljp@llornkcor.com
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#ifndef FILESAVER_H
#define FILESAVER_H
//#include <qvariant.h>
#include <qdialog.h>
#include <qfile.h>
#include <qdir.h>
#include <qstringlist.h>
#include <qlabel.h>
#include <qstring.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QListView;
class QListViewItem;
class QPushButton;
class QLineEdit;
+class QCheckBox;
class fileSaver : public QDialog
{
Q_OBJECT
public:
void populateList();
fileSaver( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0);
~fileSaver();
QLineEdit *fileEdit;
QPushButton* buttonOk;
QListView* ListView;
QPushButton* buttonCancel;
QLabel *dirLabel;
QString selectedFileName, filterStr;
QDir currentDir;
QFile file;
QStringList fileList;
+ QCheckBox *filePermCheck;
QListViewItem * item;
public slots:
private:
private slots:
void accept();
void upDir();
void listDoubleClicked(QListViewItem *);
void listClicked(QListViewItem *);
void closeEvent( QCloseEvent * );
protected slots:
protected:
};
#endif // FILESAVER_H
diff --git a/core/apps/textedit/opie-textedit.control b/core/apps/textedit/opie-textedit.control
index 4990466..55fc644 100644
--- a/core/apps/textedit/opie-textedit.control
+++ b/core/apps/textedit/opie-textedit.control
@@ -1,9 +1,9 @@
Files: bin/textedit apps/Applications/textedit.desktop
Priority: optional
Section: opie/applications
Maintainer: Warwick Allison <warwick@trolltech.com>
Architecture: arm
Version: $QPE_VERSION-$SUB_VERSION
Depends: opie-base ($QPE_VERSION)
Description: Text Editor
- The text editor for the Opie environment.
+ The (slightly enchanced) text editor for the Opie environment.
diff --git a/core/apps/textedit/textedit.cpp b/core/apps/textedit/textedit.cpp
index c869dc9..515fcdc 100644
--- a/core/apps/textedit/textedit.cpp
+++ b/core/apps/textedit/textedit.cpp
@@ -1,97 +1,101 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
// changes added by L. J. Potter Sun 02-17-2002 21:31:31
#include "textedit.h"
#include "fileBrowser.h"
#include "fileSaver.h"
+#include "filePermissions.h"
#include "fontDialog.h"
#include <qpe/fontdatabase.h>
#include <qpe/global.h>
#include <qpe/fileselector.h>
#include <qpe/applnk.h>
#include <qpe/resource.h>
#include <qpe/config.h>
#include <qpe/qpeapplication.h>
#include <qpe/qpemenubar.h>
#include <qpe/qpetoolbar.h>
//#include <qpe/finddialog.h>
#include <qstringlist.h>
#include <qaction.h>
#include <qcolordialog.h>
#include <qfileinfo.h>
#include <qlineedit.h>
#include <qmessagebox.h>
#include <qobjectlist.h>
#include <qpopupmenu.h>
#include <qspinbox.h>
#include <qtoolbutton.h>
#include <qwidgetstack.h>
+#include <qcheckbox.h>
+#include <unistd.h>
+#include <sys/stat.h>
#include <stdlib.h> //getenv
/* XPM */
static char * filesave_xpm[] = {
"16 16 78 1",
" c None",
". c #343434",
"+ c #A0A0A0",
"@ c #565656",
"# c #9E9E9E",
"$ c #525252",
"% c #929292",
"& c #676767",
"* c #848484",
"= c #666666",
"- c #D8D8D8",
"; c #FFFFFF",
"> c #DBDBDB",
", c #636363",
"' c #989898",
") c #2D2D2D",
"! c #909090",
"~ c #AEAEAE",
"{ c #EAEAEA",
"] c #575757",
"^ c #585858",
"/ c #8A8A8A",
"( c #828282",
"_ c #6F6F6F",
": c #C9C9C9",
"< c #050505",
"[ c #292929",
"} c #777777",
"| c #616161",
"1 c #3A3A3A",
"2 c #BEBEBE",
"3 c #2C2C2C",
"4 c #7C7C7C",
"5 c #F6F6F6",
"6 c #FCFCFC",
"7 c #6B6B6B",
"8 c #959595",
"9 c #4F4F4F",
"0 c #808080",
"a c #767676",
"b c #818181",
"c c #B8B8B8",
"d c #FBFBFB",
@@ -370,97 +374,97 @@ TextEdit::TextEdit( QWidget *parent, const char *name, WFlags f )
a->addTo( searchBar );
edit->insertSeparator();
a = new QAction( tr( "Delete" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( editDelete() ) );
a->addTo( edit );
searchBar->hide();
editorStack = new QWidgetStack( this );
setCentralWidget( editorStack );
searchVisible = FALSE;
fileSelector = new FileSelector( "text/*", editorStack, "fileselector" , TRUE, TRUE); //buggy
connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( showEditTools() ) );
connect( fileSelector, SIGNAL( newSelected( const DocLnk &) ), this, SLOT( newFile( const DocLnk & ) ) );
connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( openFile( const DocLnk & ) ) );
// fileOpen();
editor = new QpeEditor( editorStack );
editor->setFrameStyle( QFrame::Panel | QFrame::Sunken );
editorStack->addWidget( editor, get_unique_id() );
resize( 200, 300 );
// setFontSize(defsize,TRUE);
FontDatabase fdb;
QFont defaultFont=editor->font();
QFontInfo fontInfo(defaultFont);
cfg.setGroup("Font");
QString family = cfg.readEntry("Family", fontInfo.family());
QString style = cfg.readEntry("Style", fdb.styleString(defaultFont));
int i_size = cfg.readNumEntry("Size", fontInfo.pointSize()/10);
QString charSet = cfg.readEntry("CharSet", QFont::encodingName( fontInfo.charSet()) );
defaultFont = fdb.font(family,style,i_size,charSet);
editor->setFont( defaultFont);
wa->setOn(wrap);
updateCaption();
fileNew();
}
TextEdit::~TextEdit()
{
-// saveAs();
+// save();
Config cfg("TextEdit");
cfg.setGroup("View");
QFont f = editor->font();
cfg.writeEntry("FontSize",f.pointSize());
cfg.writeEntry("Bold",f.bold());
cfg.writeEntry("Italic",f.italic());
cfg.writeEntry("Wrap",editor->wordWrap() == QMultiLineEdit::WidgetWidth);
}
void TextEdit::zoomIn()
{
setFontSize(editor->font().pointSize()+1,FALSE);
}
void TextEdit::zoomOut()
{
setFontSize(editor->font().pointSize()-1,TRUE);
}
void TextEdit::setFontSize(int sz, bool round_down_not_up)
{
int s=10;
for (int i=0; i<nfontsizes; i++) {
if ( fontsize[i] == sz ) {
s = sz;
break;
} else if ( round_down_not_up ) {
if ( fontsize[i] < sz )
s = fontsize[i];
} else {
if ( fontsize[i] > sz ) {
s = fontsize[i];
break;
}
}
}
QFont f = editor->font();
f.setPointSize(s);
editor->setFont(f);
zin->setEnabled(s != fontsize[nfontsizes-1]);
zout->setEnabled(s != fontsize[0]);
}
void TextEdit::setBold(bool y)
@@ -649,231 +653,244 @@ void TextEdit::openFile( const QString &f )
void TextEdit::openFile( const DocLnk &f )
{
// clear();
bFromDocView = TRUE;
FileManager fm;
QString txt;
currentFileName=f.name();
qDebug("openFile doclnk " + currentFileName);
if ( !fm.loadFile( f, txt ) ) {
// ####### could be a new file
qDebug( "Cannot open file" );
//return;
}
fileNew();
if ( doc )
delete doc;
doc = new DocLnk(f);
editor->setText(txt);
editor->setEdited( false);
qDebug("openFile doclnk "+currentFileName);
doc->setName(currentFileName);
updateCaption();
}
void TextEdit::showEditTools()
{
// if ( !doc )
// close();
// clear();
fileSelector->hide();
menu->show();
editBar->show();
if ( searchVisible )
searchBar->show();
// updateCaption();
editorStack->raiseWidget( editor );
setWState (WState_Reserved1 );
}
/*!
unprompted save */
bool TextEdit::save()
{
QString file = doc->file();
QString name= doc->name();
+
QString rt = editor->text();
currentFileName= name ;
qDebug("saveFile "+currentFileName);
+ struct stat buf;
+ mode_t mode;
+ lstat(file.latin1(), &buf);
+ mode = buf.st_mode;
+
doc->setName( name);
FileManager fm;
if ( !fm.saveFile( *doc, rt ) ) {
return false;
}
-// if(doc)
-// delete doc;
-// doc = 0;
editor->setEdited( false );
+
+ chmod( file.latin1(), mode);
return true;
}
/*!
prompted save */
bool TextEdit::saveAs()
{
- qDebug("saveAsFile "+currentFileName);
+// qDebug("saveAsFile "+currentFileName);
// case of nothing to save... /// there's always something to save
// if ( !doc )//|| !bFromDocView)
// {
// qDebug("no doc");
// return true;
// }
if ( !editor->edited() ) {
delete doc;
doc = 0;
return true;
}
QString rt = editor->text();
qDebug(currentFileName);
if( currentFileName.isEmpty() || currentFileName == "Unnamed") {
qDebug("do silly TT filename thing");
if ( doc->name().isEmpty() ) {
QString pt = rt.simplifyWhiteSpace();
int i = pt.find( ' ' );
QString docname = pt;
if ( i > 0 )
docname = pt.left( i );
// remove "." at the beginning
while( docname.startsWith( "." ) )
docname = docname.mid( 1 );
docname.replace( QRegExp("/"), "_" );
// cut the length. filenames longer than that don't make sense and something goes wrong when they get too long.
if ( docname.length() > 40 )
docname = docname.left(40);
if ( docname.isEmpty() )
docname = "Unnamed";
doc->setName(docname);
currentFileName=docname;
}
}
+
fileSaveDlg=new fileSaver(this,"SaveFile",TRUE,0, currentFileName);
qDebug("wanna save filename "+currentFileName);
fileSaveDlg->exec();
if( fileSaveDlg->result() == 1 ) {
- QString fileNm=fileSaveDlg->selectedFileName;
- qDebug("saving filename "+fileNm);
- QFileInfo fi(fileNm);
- currentFileName=fi.fileName();
- if(doc) {
- qDebug("doclnk exists");
+ QString fileNm=fileSaveDlg->selectedFileName;
+ qDebug("saving filename "+fileNm);
+ QFileInfo fi(fileNm);
+ currentFileName=fi.fileName();
+ if(doc) {
+ qDebug("doclnk exists");
// QString file = doc->file();
// doc->removeFiles();
- delete doc;
- DocLnk nf;
- nf.setType("text/plain");
- nf.setFile( fileNm);
- doc = new DocLnk(nf);
+ delete doc;
+ DocLnk nf;
+ nf.setType("text/plain");
+ nf.setFile( fileNm);
+ doc = new DocLnk(nf);
// editor->setText(rt);
- qDebug("openFile doclnk "+currentFileName);
- }
- doc->setName( currentFileName);
- updateCaption( currentFileName);
-
- FileManager fm;
- if ( !fm.saveFile( *doc, rt ) ) {
- return false;
- }
-// delete doc;
-// doc = 0;
- editor->setEdited( false );
+ qDebug("openFile doclnk "+currentFileName);
+ doc->setName( currentFileName);
+ updateCaption( currentFileName);
+
+ FileManager fm;
+ if ( !fm.saveFile( *doc, rt ) ) {
+ return false;
+ }
+ if( fileSaveDlg->filePermCheck->isChecked() ) {
+ filePermissions *filePerm;
+ filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)fileNm);
+ filePerm->exec();
+ editor->setEdited( false );
+ if( filePerm)
+ delete filePerm;
+ }
+ }
}
+
if(fileSaveDlg)
- delete fileSaveDlg;
+ delete fileSaveDlg;
return true;
}
void TextEdit::clear()
{
delete doc;
doc = 0;
editor->clear();
}
void TextEdit::updateCaption( const QString &name )
{
if ( !doc )
setCaption( tr("Text Editor") );
else {
QString s = name;
if ( s.isNull() )
s = doc->name();
if ( s.isEmpty() ) {
s = tr( "Unnamed" );
currentFileName=s;
}
setCaption( s + " - " + tr("Text Editor") );
}
}
void TextEdit::setDocument(const QString& fileref)
{
bFromDocView = TRUE;
openFile(DocLnk(fileref));
// showEditTools();
}
void TextEdit::closeEvent( QCloseEvent *e )
{
if ( editorStack->visibleWidget() == fileSelector && !bFromDocView ) {
e->ignore();
repaint();
// fileRevert();
} else {
bFromDocView = FALSE;
e->accept();
}
}
void TextEdit::accept()
{
+ save();
close();
// fileOpen(); //godamn thats obnoxious! lemme out!!!
}
void TextEdit::changeFont() {
FontDatabase fdb;
QFont defaultFont=editor->font();
QFontInfo fontInfo(defaultFont);
Config cfg("TextEdit");
cfg.setGroup("Font");
QString family = cfg.readEntry("Family", fontInfo.family());
QString style = cfg.readEntry("Style", fdb.styleString(defaultFont));
int i_size = cfg.readNumEntry("Size", fontInfo.pointSize()/10);
QString charSet = cfg.readEntry("CharSet", QFont::encodingName( fontInfo.charSet()) );
defaultFont = fdb.font(family,style,i_size,charSet);
FontDialog *fontDlg;
fontDlg=new FontDialog(this,"FontDialog",TRUE);
fontDlg->exec();
QFont myFont=fontDlg->selectedFont;
editor->setFont( myFont);
delete fontDlg;
}
void TextEdit::editDelete()
{
switch ( QMessageBox::warning(this,"Text Editor","Do you really want\nto delete the current file\nfrom the disk?\nThis is irreversable!!","Yes","No",0,0,1) ) {
case 0:
if(doc) {
doc->removeFiles();
clear();
}
break;
case 1:
// exit
break;
};
}
diff --git a/core/apps/textedit/textedit.pro b/core/apps/textedit/textedit.pro
index 9b1a841..2c25d43 100644
--- a/core/apps/textedit/textedit.pro
+++ b/core/apps/textedit/textedit.pro
@@ -1,16 +1,16 @@
TEMPLATE = app
CONFIG += qt warn_on release
DESTDIR = $(OPIEDIR)/bin
-HEADERS = textedit.h fileBrowser.h fontDialog.h fileSaver.h
+HEADERS = textedit.h fileBrowser.h fontDialog.h fileSaver.h filePermissions.h
-SOURCES = main.cpp textedit.cpp fileBrowser.cpp fontDialog.cpp fileSaver.cpp
+SOURCES = main.cpp textedit.cpp fileBrowser.cpp fontDialog.cpp fileSaver.cpp filePermissions.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe
TARGET = textedit
TRANSLATIONS = ../i18n/de/textedit.ts