00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
#include <qptrlist.h>
00012
#include <qtimer.h>
00013
#include <qwhatsthis.h>
00014
00015
#include <kparts/part.h>
00016
#include <klibloader.h>
00017
#include <kurl.h>
00018
#include <kdebug.h>
00019
#include <kiconloader.h>
00020
#include <klocale.h>
00021
00022
#include <kdevcore.h>
00023
00024
#include "kdevproject.h"
00025
#include "filecreate_part.h"
00026
#include "filecreate_widget2.h"
00027
#include "filecreate_filetype.h"
00028
#include "filecreate_listitem.h"
00029
00030
namespace FileCreate {
00031
00032 FriendlyWidget::FriendlyWidget(
FileCreatePart *part)
00033 :
QTable(0,4,0),
TypeChooser(part), m_selected(NULL)
00034 {
00035
00036 setReadOnly(
true);
00037 setShowGrid(
false);
00038 horizontalHeader()->hide();
00039 setTopMargin(0);
00040 verticalHeader()->hide();
00041 setLeftMargin(0);
00042 setSelectionMode(SingleRow);
00043 setFocusStyle(FollowStyle);
00044 setColumnStretchable(3,
true);
00045
00046
m_iconLoader =
KGlobal::iconLoader();
00047
00048 QWhatsThis::add(
this, i18n(
"Use this to create new files within your project."));
00049
00050
setDefaultColumnWidths();
00051
00052 }
00053
00054
00055 FriendlyWidget::~FriendlyWidget()
00056 {
00057 }
00058
00059 void FriendlyWidget::setCurrent(
const FileType * current) {
00060
int changeToRow = -1;
00061
QMap<int,FileType*>::Iterator it;
00062
kdDebug(9034) <<
"Checking " << current->
descr() <<
" for matches in row..." <<
endl;
00063
for ( it =
typeForRow.begin(); it !=
typeForRow.end() && changeToRow==-1; ++it ) {
00064
kdDebug(9034) <<
"Checking: " << it.data()->descr() <<
endl;
00065
if (it.data()==current)
00066 changeToRow=it.key();
00067
else kdDebug(9034) <<
"No match!" <<
endl;
00068 }
00069
00070
00071
00072
if (changeToRow==-1) {
00073
for(it =
typeForRow.begin(); it!=
typeForRow.end() && changeToRow==-1; ++it) {
00074
if (it.data()->ext() == current->
ext() )
00075 changeToRow = it.key();
00076 }
00077 }
00078
00079
if (changeToRow!=-1) {
00080 m_current = current;
00081
kdDebug(9034) <<
"Found row, setting current to row " << changeToRow <<
endl;
00082
slotCellSelected(changeToRow,0);
00083 clearSelection();
00084
selectRow(changeToRow);
00085 }
00086
00087 }
00088
00089 void FriendlyWidget::refresh() {
00090
00091 disconnect(
this, SIGNAL(currentChanged(
int,
int)),
this, SLOT(
slotCellSelected(
int,
int)) );
00092
00093
empty();
00094
00095
int row = 0;
00096
QPtrList<FileType> filetypes = m_part->
getFileTypes();
00097
for(
FileType * filetype = filetypes.first();
00098 filetype;
00099 filetype=filetypes.next()) {
00100
00101
if (filetype->
enabled()) {
00102
00103
if (filetype->
subtypes().count()==0)
00104
setRow(row++, filetype);
00105
00106
QPtrList<FileType> subtypes = filetype->
subtypes();
00107
for(
FileType * subtype = subtypes.first();
00108 subtype;
00109 subtype=subtypes.next()) {
00110
if (subtype->
enabled())
00111
setRow(row++, subtype);
00112 }
00113
00114 }
00115
00116 }
00117
resizeCells();
00118
if (currentSelection()>-1) removeSelection(currentSelection());
00119
00120 connect(
this, SIGNAL(currentChanged(
int,
int)),
this, SLOT(
slotCellSelected(
int,
int)) );
00121
00122
00123 }
00124
00125 void FriendlyWidget::setRow(
int row,
FileType * filetype) {
00126
if (row+1>numRows()) setNumRows(row+1);
00127 setText(row, 1, filetype->
name() );
00128 setText(row, 2, filetype->
ext() );
00129 setText(row, 3, filetype->
descr() );
00130 item(row,1)->setWordWrap(
true);
00131 item(row,3)->setWordWrap(
true);
00132
00133
QPixmap iconPix =
m_iconLoader->
loadIcon(filetype->
icon(), KIcon::Desktop, KIcon::SizeMedium,
00134 KIcon::DefaultState, NULL,
00135
true);
00136
if (!iconPix.isNull()) {
00137 setPixmap(row, 0, iconPix);
00138 setRowHeight(row, iconPix.height()+4 );
00139
if (iconPix.width()+4>columnWidth(0))
00140 setColumnWidth(0, iconPix.width()+4 );
00141 }
00142
00143
typeForRow[row]=filetype;
00144
00145 }
00146
00147 void FriendlyWidget::empty() {
00148
typeForRow.clear();
00149
while(numRows()) removeRow(0);
00150 }
00151
00152 void FriendlyWidget::setDefaultColumnWidths() {
00153
00154
00155 setColumnWidth(0,1);
00156 setColumnWidth(1,60);
00157 setColumnWidth(2,30);
00158 setColumnWidth(3,150);
00159 }
00160
00161 void FriendlyWidget::slotCellSelected(
int row,
int col) {
00162
if (col!=0) {
00163 setCurrentCell(row, 0);
00164
return;
00165 }
00166
00167
m_selected =
typeForRow.contains(row) ?
typeForRow[row] : NULL;
00168 QTimer::singleShot(0,
this, SLOT(
slotDoSelection()) );
00169
00170 }
00171
00172 void FriendlyWidget::slotDoSelection() {
00173
kdDebug(9034) <<
"widget2: slotDoSelection" <<
endl;
00174
if (
m_selected) filetypeSelected(
m_selected);
00175
kdDebug(9034) <<
"widget2: slotDoSelection middle" <<
endl;
00176
if (currentSelection()>-1) removeSelection(currentSelection());
00177
kdDebug(9034) <<
"widget2: slotDoSelection ending" <<
endl;
00178 }
00179
00180 void FriendlyWidget::resizeCells() {
00181
for(
int r=0;r<numRows();r++)
resizeRow(r);
00182
for(
int c=0;c<
numCols();c++)
resizeColumn(c);
00183 }
00184
00185 void FriendlyWidget::resizeRow(
int row) {
00186
if (row>=numRows() || row<0)
return;
00187
int maxHeight = 0;
00188
00189
for(
int c=0;c<
numCols();c++) {
00190
QTableItem* i = item( row, c );
00191
if( !i )
00192
continue;
00193
00194
QSize size = i->sizeHint();
00195 maxHeight =
size.height()>maxHeight ?
size.height() : maxHeight;
00196 }
00197 setRowHeight(row,maxHeight+2);
00198 }
00199
00200 void FriendlyWidget::resizeColumn(
int col) {
00201
if (col>=
numCols() || col<0)
return;
00202
int maxWidth = 0;
00203
for(
int r=0;r<numRows();r++) {
00204
00205
QTableItem* i = item( r, col );
00206
if( !i )
00207
continue;
00208
00209
QSize size = item(r,col)->sizeHint();
00210 maxWidth =
size.width()>maxWidth ?
size.width() : maxWidth;
00211 }
00212 setColumnWidth(col,maxWidth+2);
00213 }
00214
00215
#if QT_VERSION < 0x030100
00216 void FriendlyWidget::selectRow(
int row) {
00217
if (
numCols()>0 && row<numRows()) {
00218
QTableSelection sel;
00219 sel.init(row,0);
00220 sel.expandTo(row,
numCols());
00221 addSelection(sel);
00222 }
00223 }
00224
#endif
00225
00226 }
00227
00228
#include "filecreate_widget2.moc"