blob: 9ca1d58fbc253aff039146f3a27a289a7ebc4ce4 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package com.sun.star.wizards.table;
import com.sun.star.awt.FontDescriptor;
import com.sun.star.awt.ItemEvent;
import com.sun.star.awt.XButton;
import com.sun.star.awt.XItemListener;
import com.sun.star.awt.XListBox;
import com.sun.star.awt.XTextComponent;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.EventObject;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.common.Desktop;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.db.TableDescriptor;
import com.sun.star.wizards.ui.UIConsts;
import com.sun.star.wizards.ui.UnoDialog;
public class FieldFormatter implements XItemListener
{
TableWizard CurUnoDialog;
TableDescriptor curTableDescriptor;
Object oColumnDescriptorModel;
XTextComponent txtfieldname;
XListBox xlstFieldNames;
XButton btnplus;
XButton btnminus;
XButton btnShiftUp;
XButton btnShiftDown;
short curtabindex;
String TOGGLEBUTTONS = "toggleButtons";
String ADDFIELDNAME = "addFieldName";
String REMOVEFIELDNAME = "removeFieldName";
String MODIFYFIELDNAME = "modifyFieldName";
String[] fieldnames;
String suntitled;
Integer IFieldFormatStep;
public FieldFormatter(TableWizard _CurUnoDialog, TableDescriptor _curTableDescriptor)
{
this.CurUnoDialog = _CurUnoDialog;
curtabindex = (short) (TableWizard.SOFIELDSFORMATPAGE * 100);
IFieldFormatStep = new Integer(TableWizard.SOFIELDSFORMATPAGE);
String sFieldName = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 23);
String sFieldNames = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 25);
String sfieldinfo = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 20);
String sbtnplushelptext = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 45);
String sbtnminushelptext = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 46);
suntitled = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 43);
CurUnoDialog.insertLabel("lblFieldNames",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGERS[8], sFieldNames, 91, 27, IFieldFormatStep, new Short(curtabindex++), 90
});
try
{
xlstFieldNames = CurUnoDialog.insertListBox("lstfieldnames", 3, null, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
133, "HID:WIZARDS_HID_DLGTABLE_LB_SELFIELDNAMES", 92, 37, IFieldFormatStep, new Short(curtabindex++), 62
});
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
FontDescriptor oFontDesc = new FontDescriptor();
oFontDesc.Name = "StarSymbol";
btnShiftUp = CurUnoDialog.insertButton("btnShiftUp", "shiftFieldNameUp", this,
new String[]
{
PropertyNames.PROPERTY_ENABLED, PropertyNames.FONT_DESCRIPTOR, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.FALSE, oFontDesc, 14, "HID:WIZARDS_HID_DLGTABLE_CMDMOVEFIELDUP", String.valueOf((char) 8743), 158, 139, IFieldFormatStep, new Short(curtabindex++), 14
});
btnShiftDown = CurUnoDialog.insertButton("btnShiftDown", "shiftFieldNameDown", this,
new String[]
{
PropertyNames.PROPERTY_ENABLED, PropertyNames.FONT_DESCRIPTOR, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.FALSE, oFontDesc, 14, "HID:WIZARDS_HID_DLGTABLE_CMDMOVEFIELDDOWN", String.valueOf((char) 8744), 158, 156, IFieldFormatStep, new Short(curtabindex++), 14
});
oFontDesc = new FontDescriptor();
oFontDesc.Weight = com.sun.star.awt.FontWeight.BOLD;
oFontDesc.Height = (short) 13;
btnminus = CurUnoDialog.insertButton("btnminus", "removeFieldName", this,
new String[]
{
PropertyNames.FONT_DESCRIPTOR, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
oFontDesc, 14, "HID:WIZARDS_HID_DLGTABLE_CMDMINUS", "-", 118, 175, IFieldFormatStep, new Short(curtabindex++), 14
});
btnplus = CurUnoDialog.insertButton("btnplus", "addFieldName", this,
new String[]
{
PropertyNames.FONT_DESCRIPTOR, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
oFontDesc, 14, "HID:WIZARDS_HID_DLGTABLE_CMDPLUS", "+", 137, 175, IFieldFormatStep, new Short(curtabindex++), 14
});
CurUnoDialog.insertControlModel("com.sun.star.awt.UnoControlFixedLineModel", "ColDescriptorHeader",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.ORIENTATION, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
8, sfieldinfo, 0, 158, 27, IFieldFormatStep, new Short(curtabindex++), 165
});
CurUnoDialog.insertLabel("lblFieldName",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGERS[8], sFieldName, 158, 39, IFieldFormatStep, new Short(curtabindex++), 94
});
txtfieldname = CurUnoDialog.insertTextField("txtfieldname", MODIFYFIELDNAME, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Text", PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGER_12, "HID:WIZARDS_HID_DLGTABLE_COLNAME", 274, 37, IFieldFormatStep, new Short(curtabindex++), PropertyNames.EMPTY_STRING, 50
});
txtfieldname.addTextListener(CurUnoDialog);
CurUnoDialog.getPeerConfiguration().setAccessibleName(btnplus, sbtnplushelptext);
CurUnoDialog.getPeerConfiguration().setAccessibleName(btnminus, sbtnminushelptext);
}
public void initialize(TableDescriptor _curTableDescriptor, String[] _fieldnames)
{
if (oColumnDescriptorModel == null)
{
oColumnDescriptorModel = CurUnoDialog.insertControlModel("com.sun.star.sdb.ColumnDescriptorControlModel", "oColumnDescriptor",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH, "EditWidth"
}, // PropertyNames.PROPERTY_HELPURL
new Object[]
{
85, 158, 49, IFieldFormatStep, new Short(curtabindex++), 166, 50
}); //, "HID:WIZARDS_HID_DLGTABLE_COLMODIFIER"
curTableDescriptor = _curTableDescriptor;
Helper.setUnoPropertyValue(oColumnDescriptorModel, PropertyNames.ACTIVE_CONNECTION, _curTableDescriptor.DBConnection);
txtfieldname.setMaxTextLen((short) this.curTableDescriptor.getMaxColumnNameLength());
}
else
{
int nStep = ((Integer) Helper.getUnoPropertyValue(oColumnDescriptorModel, PropertyNames.PROPERTY_STEP)).intValue();
if (nStep > IFieldFormatStep.intValue())
{
Helper.setUnoPropertyValue(oColumnDescriptorModel, PropertyNames.PROPERTY_STEP, IFieldFormatStep);
CurUnoDialog.repaintDialogStep();
}
}
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, _fieldnames);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
0
});
updateColumnDescriptor(_fieldnames[0], curTableDescriptor.getByName(_fieldnames[0]));
toggleButtons();
CurUnoDialog.setFocus("lstfieldnames");
}
public void toggleButtons()
{
boolean benableShiftUpButton = false;
boolean benableShiftDownButton = false;
boolean bfieldnameisselected = Helper.getUnoArrayPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS) != null;
int ilistcount = /* xlstFieldNames.getItemCount();*/ UnoDialog.getListBoxItemCount(xlstFieldNames);
boolean blistispopulated = (ilistcount > 0);
if (bfieldnameisselected)
{
int iselpos = xlstFieldNames.getSelectedItemPos();
benableShiftUpButton = (iselpos != 0);
benableShiftDownButton = (iselpos != ilistcount - 1);
}
Helper.setUnoPropertyValue(UnoDialog.getModel(btnShiftUp), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(benableShiftUpButton));
Helper.setUnoPropertyValue(UnoDialog.getModel(btnShiftDown), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(benableShiftDownButton));
Helper.setUnoPropertyValue(UnoDialog.getModel(btnminus), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(blistispopulated));
CurUnoDialog.setcompleted(TableWizard.SOFIELDSFORMATPAGE, blistispopulated);
}
public void addFieldName()
{
String snewfieldname = Desktop.getUniqueName(xlstFieldNames.getItems(), suntitled, PropertyNames.EMPTY_STRING);
short icount = xlstFieldNames.getItemCount();
if (CurUnoDialog.verifyfieldcount(icount))
{
xlstFieldNames.addItem(snewfieldname, icount);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
icount
});
toggleButtons();
FieldDescription curfielddescription = new FieldDescription(snewfieldname);
CurUnoDialog.fielditems.put(snewfieldname, curfielddescription);
curTableDescriptor.addColumn(curfielddescription.getPropertyValues());
updateColumnDescriptor(snewfieldname, curTableDescriptor.getByName(snewfieldname));
CurUnoDialog.setControlVisible("oColumnDescriptor", true);
CurUnoDialog.repaintDialogStep();
}
}
public void removeFieldName()
{
String[] fieldnames = (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST);
short ipos = UnoDialog.getSelectedItemPos(xlstFieldNames);
String fieldname = fieldnames[ipos];
xlstFieldNames.removeItems(ipos, (short) 1);
CurUnoDialog.fielditems.remove(fieldname);
int ilistcount = /* xlstFieldNames.getItemCount();*/ UnoDialog.getListBoxItemCount(xlstFieldNames);
if ((ipos) < ilistcount)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
ipos
});
}
else
{
if (ilistcount > -1)
{
ipos = (short) ((short) ilistcount - (short) 1);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
ipos
});
}
}
curTableDescriptor.dropColumnbyName(fieldname);
fieldnames = (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST);
boolean benable = ((ipos > -1) && (ipos < fieldnames.length));
if (benable)
{
String snewfieldname = fieldnames[ipos];
updateColumnDescriptor(snewfieldname, curTableDescriptor.getByName(snewfieldname));
toggleButtons();
}
else
{
Helper.setUnoPropertyValue(UnoDialog.getModel(txtfieldname), "Text", PropertyNames.EMPTY_STRING);
Helper.setUnoPropertyValue(UnoDialog.getModel(btnminus), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(benable));
CurUnoDialog.setcompleted(TableWizard.SOFIELDSFORMATPAGE, benable);
}
Helper.setUnoPropertyValue(UnoDialog.getModel(btnminus), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(benable));
CurUnoDialog.setControlVisible("oColumnDescriptor", benable);
CurUnoDialog.repaintDialogStep();
}
public void modifyFieldName()
{
String newfieldname = txtfieldname.getText();
String oldfieldname = xlstFieldNames.getSelectedItem();
if (!newfieldname.equals(oldfieldname))
{
if (curTableDescriptor.modifyColumnName(oldfieldname, newfieldname))
{
Object oColumn = Helper.getUnoPropertyValue(oColumnDescriptorModel, "Column");
Helper.setUnoPropertyValue(oColumn, PropertyNames.PROPERTY_NAME, newfieldname);
FieldDescription curfielddescription = (FieldDescription) CurUnoDialog.fielditems.get(oldfieldname);
CurUnoDialog.fielditems.remove(oldfieldname);
curfielddescription.setName(newfieldname);
CurUnoDialog.fielditems.put(newfieldname, curfielddescription);
String[] fieldnames = xlstFieldNames.getItems();
short ipos = xlstFieldNames.getSelectedItemPos();
fieldnames[ipos] = newfieldname;
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, fieldnames);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
ipos
});
}
}
}
public void shiftFieldNameUp()
{
short ipos = xlstFieldNames.getSelectedItemPos();
String[] snewlist = shiftArrayItem(xlstFieldNames.getItems(), ipos, -1);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, snewlist);
if ((ipos - 1) > -1)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
(short) (ipos - 1)
});
curTableDescriptor.moveColumn(ipos, ipos - 1);
}
toggleButtons();
}
public void shiftFieldNameDown()
{
short ipos = xlstFieldNames.getSelectedItemPos();
String[] snewlist = shiftArrayItem(xlstFieldNames.getItems(), ipos, 1);
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, snewlist);
if ((ipos + 1) < xlstFieldNames.getItemCount())
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
{
(short) (ipos + 1)
});
curTableDescriptor.moveColumn(ipos, ipos + 1);
}
toggleButtons();
}
public String[] shiftArrayItem(String[] _slist, int _oldindex, int _shiftcount)
{
int newindex = _oldindex + _shiftcount;
if ((newindex >= 0) && (newindex < _slist.length))
{
String buffer = _slist[newindex];
_slist[newindex] = _slist[_oldindex];
_slist[_oldindex] = buffer;
}
return _slist;
}
public boolean updateColumnofColumnDescriptor()
{
Object oColumn = Helper.getUnoPropertyValue(oColumnDescriptorModel, "Column");
XPropertySet xColPropertySet = UnoRuntime.queryInterface(XPropertySet.class, oColumn);
if (xColPropertySet != null)
{
curTableDescriptor.modifyColumn(txtfieldname.getText(), xColPropertySet);
return true;
}
return false;
}
private void updateColumnDescriptor(String _ColumnName, XPropertySet _xColumn)
{
updateColumnofColumnDescriptor();
XPropertySet xNewPropertySet = curTableDescriptor.clonePropertySet(_ColumnName, _xColumn);
if (xNewPropertySet != null)
{
Helper.setUnoPropertyValue(oColumnDescriptorModel, "Column", xNewPropertySet);
}
txtfieldname.setText(_ColumnName);
}
public XPropertySet clonePropertySet(XPropertySet _xPropertySet)
{
return null;
}
public void itemStateChanged(ItemEvent arg0)
{
String fieldname = xlstFieldNames.getSelectedItem();
XPropertySet xColumn = curTableDescriptor.getByName(fieldname);
updateColumnDescriptor(fieldname, xColumn);
toggleButtons();
}
public boolean iscompleted()
{
String[] sfieldnames = (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST);
return sfieldnames.length > 0;
}
public String[] getFieldNames()
{
return (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST);
}
/* (non-Javadoc)
* @see com.sun.star.lang.XEventListener#disposing(com.sun.star.lang.EventObject)
*/
public void disposing(EventObject arg0)
{
// TODO Auto-generated method stub
}
}