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/libgui/device_gui.h

212 lines
5.8 KiB

/***************************************************************************
* Copyright (C) 2005 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. *
***************************************************************************/
#ifndef DEVICE_GUI_H
#define DEVICE_GUI_H
#include <tqpushbutton.h>
#include <tqlayout.h>
#include <tqcombobox.h>
class TQListViewItem;
class TQCheckBox;
#include <ktextbrowser.h>
class TDEListView;
#include "common/gui/key_gui.h"
#include "common/gui/dialog.h"
#include "device_editor.h"
#include "devices/pic/base/pic.h"
namespace Programmer { class Group; }
namespace Tool { class Group; }
namespace DeviceChooser
{
enum Type { Choose, ChooseWithAuto };
class View;
BEGIN_DECLARE_ENUM(ListType)
FamilyTree = 0, Flat
END_DECLARE_ENUM_STD(ListType)
//-----------------------------------------------------------------------------
class Config : public GenericConfig
{
public:
Config() : GenericConfig("device_chooser") {}
const Programmer::Group *programmerGroup();
void writeProgrammerGroup(const Programmer::Group *group);
const Tool::Group *toolGroup();
void writeToolGroup(const Tool::Group *group);
};
//-----------------------------------------------------------------------------
template <typename Enum>
class EnumComboBox
{
public:
EnumComboBox(const TQString &key, TQWidget *parent) : _key(key) {
_combo = new TQComboBox(parent);
for (Enum type; type<Enum::Nb_Types; ++type) _combo->insertItem(type.label());
Config config;
Enum type = config.readEnumEntry(key, Enum(Enum::Nb_Types));
if ( type!=Enum::Nb_Types ) _combo->setCurrentItem(type.type());
}
EnumComboBox(const TQString &emptyLabel, const TQString &key, TQWidget *parent) : _key(key) {
_combo = new TQComboBox(parent);
_combo->insertItem(emptyLabel);
for (Enum type; type<Enum::Nb_Types; ++type) _combo->insertItem(type.label());
Config config;
Enum type = config.readEnumEntry(key, Enum(Enum::Nb_Types));
if ( type!=Enum::Nb_Types ) _combo->setCurrentItem(type.type()+1);
}
TQComboBox *combo() { return _combo; }
Enum value() const {
if ( _combo->count()==Enum::Nb_Types ) return typename Enum::Type(_combo->currentItem());
if ( _combo->currentItem()==0 ) return Enum::Nb_Types;
return typename Enum::Type(_combo->currentItem()-1);
}
void reset() { _combo->setCurrentItem(0); }
void writeConfig() {
Config config;
config.writeEnumEntry(_key, value());
}
private:
TQString _key;
TQComboBox *_combo;
};
//-----------------------------------------------------------------------------
class Dialog : public ::Dialog
{
TQ_OBJECT
public:
Dialog(const TQString &device, Type type, TQWidget *parent);
virtual ~Dialog();
TQString device() const;
private slots:
void listDoubleClicked(TQListViewItem *item);
void currentChanged(TQListViewItem *item);
void deviceChange(const TQString &device);
void updateList();
void resetFilters();
private:
bool _withAuto;
KeyComboBox<TQString> *_programmerCombo, *_toolCombo;
EnumComboBox<ListType> *_listTypeCombo;
EnumComboBox<Device::MemoryTechnology> *_memoryCombo;
EnumComboBox<Device::Status> *_statusCombo;
EnumComboBox<Pic::Feature> *_featureCombo;
TDEListView *_listView;
View *_deviceView;
void updateList(const TQString &device);
const Programmer::Group *programmerGroup() const;
const Tool::Group *toolGroup() const;
};
//-----------------------------------------------------------------------------
class ComboBox : public TQComboBox
{
TQ_OBJECT
public:
ComboBox(bool withAuto, TQWidget *parent);
void setDevice(const TQString &device, const Device::Data *data = 0);
TQString device() const;
bool withAuto() const { return _withAuto; }
private:
bool _withAuto;
};
//-----------------------------------------------------------------------------
class Button : public TQWidget
{
TQ_OBJECT
public:
Button(bool withAuto, TQWidget *parent);
void setDevice(const TQString &device) { _combo->setDevice(device); }
TQString device() const { return _combo->device(); }
signals:
void changed();
private slots:
void chooseDevice();
private:
ComboBox *_combo;
};
//-----------------------------------------------------------------------------
class Browser : public KTextBrowser
{
TQ_OBJECT
public:
Browser(TQWidget *parent);
signals:
void deviceChanged(const TQString &device);
public slots:
virtual void setSource(const TQString &name);
};
//-----------------------------------------------------------------------------
class View : public TabWidget
{
TQ_OBJECT
public:
View(TQWidget *parent);
void clear();
void setText(const TQString &text);
void setDevice(const TQString &name, bool cannotChangeDevice);
signals:
void deviceChanged(const TQString &device);
private:
TQMimeSourceFactory _msf;
Browser *_info, *_memory, *_vfg, *_pins;
};
//-----------------------------------------------------------------------------
class Editor : public DeviceEditor
{
TQ_OBJECT
public:
Editor(const TQString &title, const TQString &tag, TQWidget *parent);
virtual bool isModified() const { return false; }
virtual bool isReadOnly() const { return true; }
virtual void addGui() {}
virtual void removeGui() {}
virtual void setFocus() {}
signals:
void deviceChanged(const TQString &device);
private:
virtual TQWidget *createView(const Device::Data *data, TQWidget *parent);
virtual void setModifiedInternal(bool) {}
virtual void setReadOnlyInternal(bool) {}
};
} // namespace
#endif