Source Code (Use browser search to find items of interest.)
Class Index
kab'TopLevelWidget (./kdeutils/kab/kab_topwidget.h:41)
class TopLevelWidget : public KTMainWindow
{
Q_OBJECT
public:
/** The indices of the statusbar parts. */
enum StatusbarIndex { Text=1, /**< The status text. */
Number /**< The number of entries. */
};
/** This descriptors are used to create the view. */
enum View { NoView=0,
BusinessCard,
Editing
};
/** The constructor. */
TopLevelWidget();
protected:
/** Construct the menubar. */
void makeMenu();
/** Construct the toolbar. */
void makeToolbar();
/** Construct the statusbar. */
void makeStatusbar();
/** Create the interface to the address database. */
bool initializeInterface();
/** Create the view. This method reads the latest view
chosen by the user and restores it if no view is given.
*/
void createView(View=NoView, bool recreate=false);
/** The main widget. There are different child classes of
* KABBasicLook. */
KABBasicLook *view;
/** Stores the currently selected view. */
View currentView;
/** The interface to the AddressBook object. */
KabAPI *api;
/** A pointer to a key storing the entry currently displayed.
* This property is set by the entrySelected method.
* @see entrySelected
*/
KabKey *current;
/** The pointer to the file menu. */
QPopupMenu *file;
/** The pointer to the import menu. */
QPopupMenu *import;
/** The pointer to the edit menu. */
QPopupMenu *edit;
/** The id of the mail and browse menu items. */
int idEditMail, idEditBrowse;
/** The pointer to the view menu. */
QPopupMenu *menuview;
/** The IDs of the view status entries. */
int idViewBC, idViewEdit;
/** The datanavigator widget. Although it is child of the toolbar,
* the pointer to the datanavigator is stored here to be able to
* update its contents. */
KDataNavigator *nav;
/** Used to reset the status bar. */
QTimer *timer;
/** The list containing the status messages to display. */
QStringList *messages;
/** If true, the entry needs to be saved before showing another
one. */
bool modified;
/** Signals that the "Quit" button has been selected. */
bool closingdown;
/** Edit this entry. */
bool editCurrentEntry();
/** Remove this entry. If quiet is true, the entry is removed
silently even if query-on-delete is set. Use it for deleting
temporaries. Careful! */
bool removeCurrentEntry(bool quiet=false);
public slots:
/** An entry has been selected. */
void entrySelected(int);
/** The entries map has changed. Possibly the database, too...*/
void entriesChanged();
// The file menu:
/** Create a new address database. Triggered from the menu. */
void createNew();
/** Load the standard database. This is the predefined user database
* created on the first start of the program. Note that the user might
* configure this filename!. Triggered from the menu. */
void loadDefaultDatabase();
/** Load a database file. With kab2, the filename is no more fixed.
* Triggered from the menu. */
void loadDatabaseFile();
/** Save the database. */
void save();
/** Import kab 1 addressbook. This is triggered from the menu. */
void importKab1Addressbook();
/** Set the status bar text. */
void setStatus(const QString&);
/** Erase it after some time. */
void statusbarTimeOut();
/** The business card view has been selected. */
void selectViewBC();
/** The editing view has been selected. */
void selectViewEdit();
/** Add an entry. */
void add(); /** Edit an entry. */
void editEntry();
/** Remove an entry. */
void remove();
/** Send an email. Calls mail(const QString& url). Just for convenience. */
void mail();
/** Send an email. */
void mail(const QString& url);
/** Browse the homepage. Calls browse(const QString& url). Just for convenience. */
void browse();
/** Browse the homepage. */
void browse(const QString& url);
/** Enable all messages disabled by the "do not show again" button. */
void enableAllMessages();
/** Configure settings local to the file. User field names, for example. */
void configureFile();
/** The currently displayed entry has been changed by the user. We
will store this in a boolean value, and (according to a
configuration setting) ask the user to save her changes before
displaying another entry. */
void entryChangedSlot();
/** Quit the application. */
void quit();
/** About-kab-slot. Overloaded from KTMainWindow. */
void showAboutApplication(void);
/** About-KDE-slot. */
void aboutKDE();
signals:
/** Called after changes in the database that the AddressBook object
* does not recognize.
*/
void databaseChanged();
};
kab'TopLevelWidget::configureFile() (./kdeutils/kab/dialog_configurefile.cc:51)
void TopLevelWidget::configureFile()
{
Section *config;
// -----
config=api->addressbook()->configurationSection();
if(config==0)
{
return;
}
KDialogBase dialog(this);
KabFileConfigWidget widget(config, &dialog);
widget.setMinimumSize(320, 200);
dialog.setMainWidget(&widget);
if(dialog.exec())
{
emit(setStatus(i18n("Accepted.")));
if(widget.saveSettings(config)!=AddressBook::NoError)
{
emit(setStatus(i18n("Permission denied.")));
} else {
emit(setStatus(i18n("Settings applied.")));
}
save();
createView(currentView, true);
} else {
emit(setStatus(i18n("Rejected.")));
}
}
kab'TopLevelWidget::editEntry() (./kdeutils/kab/dialog_editentry.cc:36)
void TopLevelWidget::editEntry()
{
editCurrentEntry();
}
kab'TopLevelWidget::editCurrentEntry() (./kdeutils/kab/dialog_editentry.cc:41)
bool TopLevelWidget::editCurrentEntry()
{
// it must be ensured that all other changes are committed to the database
// before calling this method since it uses the entry as it is found into
// the database
AddressBook::Entry entry;
// ----- create a KDialogBase dialog containing a KABEditLook widget:
KDialogBase dialog(this);
KABEditLook *look=new KABEditLook(api, &dialog);
look->setMinimumSize(320, 200); // WORK_TO_DO: remove this line
dialog.setMainWidget(look);
dialog.resize(dialog.minimumSize());
// WORK_TO_DO: handle size
// ----- get the entry:
if(api->addressbook()->getEntry(*current, entry)!=AddressBook::NoError)
{
debug("TopLevelWidget::editCurrentEntry: no such entry.");
}
// ----- display the editing dialog:
look->setEntry(entry);
if(dialog.exec())
{
look->getEntry(entry);
view->setEntry(entry);
modified=true;
emit(setStatus(i18n("Accepted.")));
return true;
} else {
emit(setStatus(i18n("Rejected.")));
return false;
}
}
kab'TopLevelWidget::createNew() (./kdeutils/kab/kab_createnew.cc:39)
void TopLevelWidget::createNew()
{
register bool GUARD; GUARD=true;
// ###########################################################################
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: called.");
QString home, filename;
KURL dummy;
QFileInfo info;
// ----- select the filename:
home=QDir::homeDirPath();
if(home.isEmpty())
{
KMessageBox::sorry
(this, i18n("Could not find the users home directory."), i18n("Sorry"));
setStatus(i18n("Intern error!"));
kapp->beep();
return;
}
for(;;) // do forever
{
// dummy=KFileDialog::getOpenFileName(home, "*kab", this);
dummy=KFileDialog::getOpenURL(home, "*kab", this);
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: URL is %s.", dummy.decodedURL().data());
if(dummy.isEmpty()) // dialog has been cancelled
{
setStatus(i18n("Cancelled."));
qApp->beep();
return;
}
// WORK_TO_DO: download the URL or find the local file name in filename
if(!dummy.isLocalFile())
{
setStatus( i18n( "Only local files supported yet." ) );
qApp->beep();
return;
} else {
filename=dummy.path();
}
// ...
// -----
info.setFile(filename);
if(info.isDir() || info.exists())
{
KMessageBox::sorry
(this,
i18n("This file is a directory, or it already exists.\n"
"Please select another filename.\n"
"You must have permission to write "
"to create the new file."),
i18n("File error"));
} else {
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: filename is %s.", filename.data());
break;
}
}
// ----- adjust name:
if(filename.length()<4 || filename.mid(filename.length()-4, 4)!=".kab")
{
filename+=".kab";
KMessageBox::information
(this,
i18n("The filename did not end with \".kab\".\n"
"It has been changed to\n")+filename,
i18n("Note"));
}
// ----- create the new database file:
if(api->addressbook()->createNew(filename)!=AddressBook::NoError)
{
KMessageBox::sorry
(this,
i18n("The file could not be created, possibly permission denied."),
i18n("kab: File error"));
qApp->beep();
return;
}
// ----- load this file:
if(api->addressbook()->load(filename)!=AddressBook::NoError)
{
KMessageBox::sorry
(this, i18n("The file has been created, but could not be loaded."),
i18n("File error"));
qApp->beep();
return;
}
// -----
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: done.");
// ###########################################################################
}
kab'TopLevelWidget::loadDatabaseFile() (./kdeutils/kab/kab_openfile.cc:38)
void TopLevelWidget::loadDatabaseFile()
{
register bool GUARD; GUARD=true;
// ###########################################################################
kDebugInfo(GUARD, 0, "KabMainWindow::open: called.");
QString home, filename;
KURL dummy;
QFileInfo info;
// ----- select the filename:
home=QDir::homeDirPath();
if(home.isEmpty())
{
KMessageBox::sorry
(this, i18n("Could not find the users home directory."), i18n("Sorry"));
setStatus(i18n("Intern error!"));
kapp->beep();
return;
}
for(;;) // do forever
{
dummy = KFileDialog::getOpenURL(home, "*kab", this);
if(dummy.isEmpty()) // dialog has been cancelled
{
setStatus(i18n("Cancelled."));
qApp->beep();
return;
}
// WORK_TO_DO: download the URL or find the local file name in filename
if(!dummy.isLocalFile())
{
setStatus(i18n("Only local files supported yet."));
qApp->beep();
return;
} else {
filename=dummy.path();
}
// ...
// -----
info.setFile(filename);
if(info.isDir() || !info.exists())
{
KMessageBox::sorry
(this, i18n("The file does not exist or is a directory.\n"
"Use \"New File\" to create a new one.\n"
"Select an existing file to load it."),
i18n("File error"));
} else {
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: filename is %s.",
filename.data());
break;
}
}
// ----- load the file:
if(api->addressbook()->load(filename)!=AddressBook::NoError)
{
KMessageBox::sorry
(this, i18n("The file could not be loaded."),
i18n("File error"));
kapp->beep();
return;
}
// -----
modified=false;
// WORK_TO_DO: updateGUI();
kDebugInfo(GUARD, 0, "KabMainWindow::newFile: done.");
// ###########################################################################
}
kab'TopLevelWidget::save() (./kdeutils/kab/kab_save.cc:32)
void TopLevelWidget::save()
{
// ###########################################################################
AddressBook::Entry entry;
// WORK_TO_DO:
// ----- remember last visible entry:
// ----- save the database:
AddressBook *book=api->addressbook();
if(modified)
{
// ----- put the new entry into the database:
// preload it with the old contents
if(book->getEntry(*current, entry)!=AddressBook::NoError)
{
emit(setStatus(i18n("Internal error.")));
}
// get all values from the current view:
view->getEntry(entry);
// and store it:
switch(book->change(*current, entry))
{
case AddressBook::NoError:
emit(setStatus(i18n("Entry stored.")));
break;
case AddressBook::PermDenied:
emit(setStatus(i18n("Permission denied.")));
return;
default:
emit(setStatus(i18n("Internal error.")));
return;
}
}
if(book->save("", true)!=AddressBook::NoError)
{
KMessageBox::sorry
(this, i18n("The file could not be saved (permission denied)."),
i18n("kab: File error"));
}
// ----- finally say something and remember state:
setStatus(i18n("File saved."));
modified=false;
// ###########################################################################
}
kab'TopLevelWidget::TopLevelWidget() (./kdeutils/kab/kab_topwidget.cc:47)
TopLevelWidget::TopLevelWidget()
: KTMainWindow(),
view(0),
currentView(NoView),
current(0),
timer(new QTimer(this)),
messages(new QStringList),
modified(false),
closingdown(false)
{
bool GUARD; GUARD=true;
kDebugInfo(GUARD, 0, "TopLevelWidget ctor: called.");
// -----
// WORK_TO_DO: remember last selected view
createView(BusinessCard);
api=new KabAPI(this);
if(api==0)
{
KMessageBox::sorry
(this, i18n("Out of memory."),
i18n("General failure"));
::exit(-1);
}
// -----
makeMenu();
makeToolbar();
makeStatusbar();
// -----
connect(nav, SIGNAL(itemSelected(int)), SLOT(entrySelected(int)));
connect(api, SIGNAL(setStatus(const QString&)),
SLOT(setStatus(const QString&)));
connect(timer, SIGNAL(timeout()), SLOT(statusbarTimeOut()));
// -----
if(!initializeInterface())
{
KMessageBox::sorry
(this, i18n("Could not connect to the address database."),
i18n("Database error"));
::exit(-1);
}
connect(this, SIGNAL(databaseChanged()),
api->addressbook(), SLOT(externalChange()));
// -----
entriesChanged();
// -----
setStatus(i18n("Welcome to kab 2.0"));
kDebugInfo(GUARD, 0, "TopLevelWidget ctor: done.");
}
kab'TopLevelWidget::makeMenu() (./kdeutils/kab/kab_topwidget.cc:96)
void TopLevelWidget::makeMenu()
{
// ----- the file menu:
file=new QPopupMenu;
CHECK_PTR(file);
// ----- the import (sub-) menu (more should follow):
import=new QPopupMenu;
CHECK_PTR(import);
import->insertItem(i18n("&KDE 1 address book"), this,
SLOT(importKab1Addressbook()));
file->insertItem(i18n("&Create new database"), this,
SLOT(createNew()), KStdAccel::openNew());
file->insertItem(i18n("&Open"), this,
SLOT(loadDatabaseFile()), KStdAccel::open());
file->insertItem(i18n("Open default &database"), this,
SLOT(loadDefaultDatabase()));
file->insertItem(i18n("&Save"), this,
SLOT(save()), KStdAccel::save());
file->insertSeparator();
file->insertItem(i18n("&Import..."), import);
file->insertSeparator();
file->insertItem(i18n("&Quit"), this, SLOT(quit()), KStdAccel::quit());
// ----- the edit menu:
edit=new QPopupMenu;
edit->insertItem(i18n("&Add entry"), this, SLOT(add()), CTRL+Key_A);
edit->insertItem(i18n("&Edit entry"), this, SLOT(editEntry()), CTRL+Key_E);
edit->insertItem(i18n("&Remove entry"), this, SLOT(remove()), CTRL+Key_R);
edit->insertSeparator();
idEditMail=edit->insertItem(i18n("Send an e&mail"), this, SLOT(mail()), CTRL+Key_M);
idEditBrowse=edit->insertItem(i18n("&Browse"), this, SLOT(browse()), CTRL+Key_B);
edit->insertSeparator();
edit->insertItem(i18n("Enable all &messages"), this,
SLOT(enableAllMessages()));
edit->insertItem(i18n("&Configure this file"), this,
SLOT(configureFile()));
// ----- the view menu:
menuview=new QPopupMenu;
idViewBC=menuview->insertItem(i18n("&Business card"), this,
SLOT(selectViewBC()));
idViewEdit=menuview->insertItem(i18n("&Editing"), this,
SLOT(selectViewEdit()));
menuview->setCheckable(true);
selectViewBC();
// -----
menuBar()->insertItem(i18n("&File"), file);
menuBar()->insertItem(i18n("&Edit"), edit);
menuBar()->insertItem(i18n("&View"), menuview);
menuBar()->insertItem
(i18n("&Help"), helpMenu(QString::null, false));
}
kab'TopLevelWidget::makeToolbar() (./kdeutils/kab/kab_topwidget.cc:147)
void TopLevelWidget::makeToolbar()
{
int id;
// -----
nav=new KDataNavigator(toolBar());
nav->setFrameStyle(QFrame::NoFrame);
nav->setMode(KDataNavigator::List);
id=toolBar()->insertWidget(0, 100, nav);
toolBar()->setItemAutoSized(id);
connect(nav, SIGNAL(newItem()), SLOT(add()));
}
kab'TopLevelWidget::makeStatusbar() (./kdeutils/kab/kab_topwidget.cc:159)
void TopLevelWidget::makeStatusbar()
{
//statusBar()->setInsertOrder(KStatusBar::RightToLeft);
statusBar()->insertItem("20000/20000", Number);
statusBar()->insertItem("", Text, 1000, true);
}
kab'TopLevelWidget::initializeInterface() (./kdeutils/kab/kab_topwidget.cc:166)
bool TopLevelWidget::initializeInterface()
{
if(api->init()!=AddressBook::NoError)
{
KMessageBox::sorry
(this, i18n("The database interface could not be created."),
i18n("Database error"));
return false;
} else {
connect(api->addressbook(), SIGNAL(changed()),
SLOT(entriesChanged()));
return true;
}
}
kab'TopLevelWidget::entrySelected() (./kdeutils/kab/kab_topwidget.cc:181)
void TopLevelWidget::entrySelected(int index)
{
bool GUARD; GUARD=true;
kDebugInfo(GUARD, 0, "TopLevelWidget::entrySelected: called (%i).", index);
// -----
AddressBook::Entry entry;
KabKey key;
int number;
QString text;
// ----- store user changes:
if(closingdown) return;
if(modified) // the current entry has been modified
{ // WORK_TO_DO: respect "Query save on change" configuration setting
if(current!=0) // make sure non-debug versions also work stable
{
if(KMessageBox::questionYesNo
(this,
i18n("You changed this entry.\nSave changes?\n"
"(Unsaved changes will be lost.)"),
i18n("Save changes?"))==KMessageBox::Yes)
{
save();
}
}
}
// -----
number=api->addressbook()->noOfEntries();
if(number!=0)
{
view->setEnabled(true);
if(api->addressbook()->getKey(index, key)!=AddressBook::NoError)
{
kDebugInfo("TopLevelWidget::entrySelected: no such entry (%i).",
index);
}
if(api->addressbook()->getEntry(key, entry)!=AddressBook::NoError)
{
kDebugInfo("TopLevelWidget::entrySelected: cannot access existing entry.");
}
} else {
kDebugInfo("TopLevelWidget::entrySelected: no entries.");
view->setEnabled(false);
}
// -----
if(number==0)
{
text=i18n("No entries.");
} else {
text=text.sprintf("%i/%i", index+1, number);
}
statusBar()->changeItem(text, Number);
// -----
view->setEntry(entry);
modified=false; // finally reset modification mark
if(current!=0)
{ // make sure the old key is deleted:
delete current; current=0;
}
current=new KabKey(key);
kDebugInfo(GUARD, 0, "TopLevelWidget::entrySelected: done (%i).", index);
}
kab'TopLevelWidget::entriesChanged() (./kdeutils/kab/kab_topwidget.cc:243)
void TopLevelWidget::entriesChanged()
{ // this signal is emitted from AddressBook::updateEntriesMap
bool GUARD; GUARD=true;
kDebugInfo(GUARD, 0, "TopLevelWidget::entriesChanged: called.");
// -----
QStringList headlines;
// -----
if(api->addressbook()->getListOfNames(&headlines, true, false)
!=AddressBook::NoError)
{
return;
}
nav->setList(&headlines);
entrySelected(0); // WORK_TO_DO: remember the visible entry like in kab 1
// -----
kDebugInfo(GUARD, 0, "TopLevelWidget::entriesChanged: done.");
}
kab'TopLevelWidget::importKab1Addressbook() (./kdeutils/kab/kab_topwidget.cc:261)
void TopLevelWidget::importKab1Addressbook()
{ // WORK_TO_DO: Proof-read messages
// ###########################################################################
Kab1Importer importer(api, this);
connect(&importer, SIGNAL(setStatus(const QString&)),
SLOT(setStatus(const QString&)));
if(importer.exec())
{
entriesChanged();
}
// ###########################################################################
}
kab'TopLevelWidget::setStatus() (./kdeutils/kab/kab_topwidget.cc:274)
void TopLevelWidget::setStatus(const QString& text)
{
// ###########################################################################
messages->append(text);
if(!timer->isActive())
{
timer->start(0);
} else {
timer->start(500);
}
// ###########################################################################
}
kab'TopLevelWidget::statusbarTimeOut() (./kdeutils/kab/kab_topwidget.cc:287)
void TopLevelWidget::statusbarTimeOut()
{
// ###########################################################################
if(!messages->isEmpty())
{
statusBar()->changeItem(messages->first(), Text);
messages->remove(messages->begin());
if(messages->isEmpty())
{
timer->start(5000, true);
} else {
timer->start(1000, true);
}
} else {
statusBar()->changeItem("", Text);
}
// ###########################################################################
}
kab'TopLevelWidget::loadDefaultDatabase() (./kdeutils/kab/kab_topwidget.cc:306)
void TopLevelWidget::loadDefaultDatabase()
{
// ###########################################################################
QString path;
// -----
path=api->addressbook()->getStandardFilename();
if(!path.isEmpty())
{
if(api->addressbook()->load(path)!=AddressBook::NoError)
{
KMessageBox::sorry
(this, i18n("The standard file could not be loaded."),
i18n("File error"));
}
}
modified=false;
// ###########################################################################
}
kab'TopLevelWidget::selectViewBC() (./kdeutils/kab/kab_topwidget.cc:325)
void TopLevelWidget::selectViewBC()
{
menuview->setItemChecked(idViewBC, true);
menuview->setItemChecked(idViewEdit, false);
createView(BusinessCard);
emit(setStatus(i18n("Business card view.")));
}
kab'TopLevelWidget::selectViewEdit() (./kdeutils/kab/kab_topwidget.cc:333)
void TopLevelWidget::selectViewEdit()
{
menuview->setItemChecked(idViewBC, false);
menuview->setItemChecked(idViewEdit, true);
createView(Editing);
emit(setStatus(i18n("Editing view.")));
}
kab'TopLevelWidget::enableAllMessages() (./kdeutils/kab/kab_topwidget.cc:341)
void TopLevelWidget::enableAllMessages()
{
if(KMessageBox::questionYesNo
(this,
i18n("This will re-enable all messages you disabled before.\n"
"Continue?"),
i18n("Enable messages?"))==KMessageBox::Yes)
{
KMessageBox::enableAllMessages();
}
}
kab'TopLevelWidget::add() (./kdeutils/kab/kab_topwidget.cc:353)
void TopLevelWidget::add()
{ // WORK_TO_DO: check for redundant calls
KabKey key;
AddressBook::Entry entry; // WORK_TO_DO: possibly use templates or default entries?
int index;
// -----
switch(api->add(entry, key, true))
{
case AddressBook::NoError:
// ----- first save the database:
emit(setStatus(i18n("New entry added.")));
save();
emit(databaseChanged());
entriesChanged();
// ----- make the new entry the current (and visible):
if(api->addressbook()->getIndex(key, index)==AddressBook::NoError)
{
entrySelected(index);
}
// ----- and edit it if we are not in editing mode:
if(currentView!=Editing)
{
if(*current==key)
{
if(editCurrentEntry())
{
emit(i18n("Saving new entry."));
save();
emit(i18n("Done."));
} else {
emit(i18n("Rejected."));
removeCurrentEntry(true); // silently
}
} else {
KMessageBox::information
(this,
i18n("Cannot display the new entry.\n"
"Unknown cause."),
i18n("Error"));
return;
}
}
break;
case AddressBook::PermDenied:
KMessageBox::information
(this,
i18n("Cannot add the new entry.\n"
"Permission denied.\n"
"You do not have writing permissions for this file."),
i18n("Error"));
return;
default:
KMessageBox::information
(this,
i18n("Cannot add the new entry.\n"
"Unknown cause."),
i18n("Error"));
return;
}
emit(databaseChanged());
entriesChanged();
// ----- recalculate index of this entry (may have changed):
if(api->addressbook()->getIndex(key, index)==AddressBook::NoError)
{
entrySelected(index);
}
}
kab'TopLevelWidget::remove() (./kdeutils/kab/kab_topwidget.cc:421)
void TopLevelWidget::remove()
{
removeCurrentEntry();
}
kab'TopLevelWidget::removeCurrentEntry() (./kdeutils/kab/kab_topwidget.cc:426)
bool TopLevelWidget::removeCurrentEntry(bool quiet)
{
bool queryOnDelete=true; // WORK_TO_DO: respect configuration settings
bool doIt=true;
// -----
if(queryOnDelete && !quiet)
{
doIt=KMessageBox::questionYesNo
(this,
i18n("Really remove this entry?"),
i18n("Question"))==KMessageBox::Yes;
}
if(doIt)
{
if(api->remove(*current)==AddressBook::NoError)
{
emit(setStatus(i18n("Entry deleted.")));
save();
emit(databaseChanged());
entriesChanged();
return true;
} else {
KMessageBox::information
(this,
i18n("Could not delete the entry\n"
"(probably permission denied)."),
i18n("Error"));
emit(setStatus(i18n("Permission denied.")));
return false;
}
}
return false;
}
kab'TopLevelWidget::createView() (./kdeutils/kab/kab_topwidget.cc:460)
void TopLevelWidget::createView(View v, bool recreate)
{
bool modificationstate=modified;
// ----- avoid deleting and creating:
if(v==currentView && !recreate) return;
// -----
AddressBook::Entry entry;
// -----
if(view!=0)
{
view->getEntry(entry);
delete view;
view=0;
}
// -----
switch(v)
{
case BusinessCard:
view=new KABBusinessCard(api, this);
break;
case Editing:
view=new KABEditLook(api, this);
connect(view, SIGNAL(entryChanged()), SLOT(entryChangedSlot()));
break;
default:
kDebugWarning("TopLevelWidget::createView: unknown kind of view.");
view=new KABBusinessCard(api, this);
}
connect(view, SIGNAL(sendEmail(const QString&)), SLOT(mail(const QString&)));
connect(view, SIGNAL(browse(const QString&)), SLOT(browse(const QString&)));
view->setEntry(entry);
view->setMinimumSize(320, 200);
setView(view, true);
view->show();
currentView=v;
modified=modificationstate;
// -----
}
kab'TopLevelWidget::entryChangedSlot() (./kdeutils/kab/kab_topwidget.cc:499)
void TopLevelWidget::entryChangedSlot()
{
register bool GUARD; GUARD=false;
kDebugInfo(GUARD, 0,
"TopLevelWidget::entryChangedSlot: current entry has been changed.");
modified=true;
}
kab'TopLevelWidget::quit() (./kdeutils/kab/kab_topwidget.cc:507)
void TopLevelWidget::quit()
{
closingdown=true;
kapp->quit();
}
kab'TopLevelWidget::aboutKDE() (./kdeutils/kab/kab_topwidget.cc:513)
void TopLevelWidget::aboutKDE()
{
}
kab'TopLevelWidget::showAboutApplication() (./kdeutils/kab/kab_topwidget.cc:517)
void TopLevelWidget::showAboutApplication(void)
{
QPixmap logo;
QString path;
KAboutDialog dialog(this);
// -----
path=locate("appdata", "pics/addressbook_logo.png");
if(path.isEmpty())
{
kDebugWarning
(0, "TopLevelWidget::aboutKAB: cannot locate ressources.");
} else {
if(logo.load(path))
{
dialog.setLogo(logo);
}
}
dialog.setCaption("About KDE address book");
dialog.setVersion("KDE address book 2.0alpha");
dialog.setAuthor("Mirko Sucker", "mirko@kde.org", "", "Initial developer.");
dialog.adjust();
dialog.exec();
}
kab'TopLevelWidget::mail() (./kdeutils/kab/kab_topwidget.cc:541)
void TopLevelWidget::mail()
{
mail(QString::null);
}
kab'TopLevelWidget::mail() (./kdeutils/kab/kab_topwidget.cc:546)
void TopLevelWidget::mail(const QString& url)
{
kdDebug() << "TopLevelWidget::mail: called with url " << url << "." << endl;
}
kab'TopLevelWidget::browse() (./kdeutils/kab/kab_topwidget.cc:551)
void TopLevelWidget::browse()
{
browse(QString::null);
}
kab'TopLevelWidget::browse() (./kdeutils/kab/kab_topwidget.cc:556)
void TopLevelWidget::browse(const QString& url)
{
kdDebug() << "TopLevelWidget::browse: called with url " << url << "." << endl;
}