You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
piklab/src/common/gui/purl_gui.cpp

152 lines
5.1 KiB

/***************************************************************************
* Copyright (C) 2006 Nicolas Hadacek <hadacek@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#include "purl_gui.h"
#include <tqlayout.h>
#include <kiconloader.h>
#include <kpushbutton.h>
#include <krun.h>
#include <tdefiledialog.h>
#include <kdirselectdialog.h>
#include "misc_gui.h"
//-----------------------------------------------------------------------------
PURL::Url PURL::getOpenUrl(const TQString &startDir, const TQString &filter,
TQWidget *widget, const TQString &caption)
{
return KFileDialog::getOpenURL(startDir, filter, widget, caption);
}
PURL::UrlList PURL::getOpenUrls(const TQString &startDir, const TQString &filter,
TQWidget *widget, const TQString &caption)
{
return KFileDialog::getOpenURLs(startDir, filter, widget, caption);
}
PURL::Url PURL::getSaveUrl(const TQString &startDir, const TQString &filter,
TQWidget *widget, const TQString &caption,
SaveAction action)
{
Url url = KFileDialog::getSaveURL(startDir, filter, widget, caption);
if ( url.isEmpty() ) return Url();
switch (action) {
case NoSaveAction: break;
case AskOverwrite:
if ( url.exists() ) {
if ( !MessageBox::askContinue(i18n("File \"%1\" already exists. Overwrite ?").arg(url.pretty())) ) return Url();
}
break;
case CancelIfExists:
if ( url.exists() ) return Url();
break;
}
return url;
}
PURL::Directory PURL::getExistingDirectory(const TQString &startDir, TQWidget *widget,
const TQString &caption)
{
KURL kurl = KDirSelectDialog::selectDirectory(startDir, false, widget, caption);
if ( kurl.isEmpty() ) return Directory();
return Directory(kurl.path(1));
}
TQPixmap PURL::icon(FileType type)
{
if (type.data().xpm_icon) return TQPixmap(type.data().xpm_icon);
if ( hasMimetype(type) ) return KMimeType::mimeType(type.data().mimetype)->pixmap(KIcon::Small);
return TQPixmap();
}
bool PURL::hasMimetype(FileType type)
{
if ( type.data().mimetype==0 ) return false;
KMimeType::Ptr ptr = KMimeType::mimeType(type.data().mimetype);
return ( ptr!=KMimeType::defaultMimeTypePtr() );
}
//-----------------------------------------------------------------------------
PURL::Label::Label(const TQString &url, const TQString &text,
TQWidget *parent, const char *name)
: KURLLabel(url, text, parent, name)
{
connect(this, TQT_SIGNAL(leftClickedURL()), TQT_SLOT(urlClickedSlot()));
}
void PURL::Label::urlClickedSlot()
{
(void)new KRun(url());
}
//-----------------------------------------------------------------------------
PURL::BaseWidget::BaseWidget(TQWidget *parent, const char *name)
: TQWidget(parent, name)
{
init();
}
PURL::BaseWidget::BaseWidget(const TQString &defaultDir, TQWidget *parent, const char *name)
: TQWidget(parent, name), _defaultDir(defaultDir)
{
init();
}
void PURL::BaseWidget::init()
{
TQHBoxLayout *top = new TQHBoxLayout(this, 0, 10);
_edit = new KLineEdit(this);
connect(_edit, TQT_SIGNAL(textChanged(const TQString &)), TQT_SIGNAL(changed()));
top->addWidget(_edit);
KIconLoader loader;
TQIconSet iconset = loader.loadIcon("fileopen", KIcon::Toolbar);
TQPushButton *button = new KPushButton(iconset, TQString(), this);
connect(button, TQT_SIGNAL(clicked()), TQT_SLOT(buttonClicked()));
top->addWidget(button);
}
//----------------------------------------------------------------------------
void PURL::DirectoryWidget::buttonClicked()
{
Directory dir = getExistingDirectory(_defaultDir, this, i18n("Select Directory"));
if ( dir.isEmpty() ) return;
_edit->setText(dir.path());
emit changed();
}
//----------------------------------------------------------------------------
PURL::DirectoriesWidget::DirectoriesWidget(const TQString &title, TQWidget *parent, const char *name)
: TQVGroupBox(title, parent, name)
{
init(TQString());
}
PURL::DirectoriesWidget::DirectoriesWidget(const TQString &title, const TQString &defaultDir, TQWidget *parent, const char *name)
: TQVGroupBox(title, parent, name)
{
init(defaultDir);
}
void PURL::DirectoriesWidget::init(const TQString &defaultDir)
{
DirectoryWidget *edit = new DirectoryWidget(defaultDir);
_editListBox = new EditListBox(1, edit, edit->lineEdit(), this, "directories_editlistbox");
connect(_editListBox, TQT_SIGNAL(changed()), TQT_SIGNAL(changed()));
}
//----------------------------------------------------------------------------
void PURL::UrlWidget::buttonClicked()
{
Url url = getOpenUrl(_defaultDir, _filter, this, i18n("Select File"));
if ( url.isEmpty() ) return;
_edit->setText(url.filepath());
emit changed();
}