blob: 841bd86f5a2a516ebf6a1c30e8ad06d898c0b546 [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.ui;
import java.beans.PropertyChangeEvent;
import com.sun.star.wizards.common.*;
import com.sun.star.awt.*;
import java.util.ArrayList;
public class SortingComponent
{
com.sun.star.lang.XMultiServiceFactory xMSF;
WizardDialog CurUnoDialog;
int MaxSortIndex = -1;
public String[][] FieldNames;
static String sNoSorting;
static String sSortCriteriaisduplicate;
static String[] sSortHeader = new String[4];
static String[] sSortAscend = new String[4];
static String[] sSortDescend = new String[4];
static short[] bOldSortValues = new short[4];
public int MAXSORTCRITERIAINDEX = 3;
final int SOFIRSTSORTLST = 0;
final int SOSECSORTLST = 1;
final int SOTHIRDSORTLST = 2;
final int SOFOURTHSORTLST = 3;
final int[] SOSORTLST = new int[]
{
SOFIRSTSORTLST, SOSECSORTLST, SOTHIRDSORTLST, SOFOURTHSORTLST
};
XListBox[] xSortListBox = new XListBox[4];
class ItemListenerImpl implements com.sun.star.awt.XItemListener
{
public void itemStateChanged(ItemEvent EventObject)
{
Helper.setUnoPropertyValue(CurUnoDialog.xDialogModel, PropertyNames.PROPERTY_ENABLED, Boolean.FALSE);
int ikey = CurUnoDialog.getControlKey(EventObject.Source, CurUnoDialog.ControlList);
enableNextSortListBox(ikey);
Helper.setUnoPropertyValue(CurUnoDialog.xDialogModel, PropertyNames.PROPERTY_ENABLED, Boolean.TRUE);
}
public void disposing(com.sun.star.lang.EventObject eventObject)
{
}
}
public SortingComponent(WizardDialog CurUnoDialog, int iStep, int iCompPosX, int iCompPosY, int iCompWidth, int FirstHelpIndex)
{
try
{
this.CurUnoDialog = CurUnoDialog;
short curtabindex = UnoDialog.setInitialTabindex(iStep);
xMSF = CurUnoDialog.xMSF;
Integer IStep = new Integer(iStep);
Integer ICompPosX = new Integer(iCompPosX);
Integer ICompPosY = new Integer(iCompPosY);
Integer ICompWidth = new Integer(iCompWidth);
Integer IListBoxPosX = new Integer(iCompPosX + 6);
int iOptButtonWidth = 65;
Integer IOptButtonWidth = new Integer(iOptButtonWidth);
Integer IListBoxWidth = new Integer(iCompWidth - iOptButtonWidth - 12);
Integer IOptButtonPosX = new Integer(IListBoxPosX.intValue() + IListBoxWidth.intValue() + 6);
getResources();
com.sun.star.awt.XWindow[] xListBoxWindow = new com.sun.star.awt.XWindow[4];
boolean bDoEnable;
String HIDString;
int iCurPosY = iCompPosY;
for (int i = 0; i < 4; i++)
{
bDoEnable = (i < 2);
CurUnoDialog.insertControlModel("com.sun.star.awt.UnoControlFixedLineModel", "lblSort" + Integer.toString(i + 1), new String[]
{
PropertyNames.PROPERTY_ENABLED, 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[]
{
Boolean.valueOf(bDoEnable), 8, sSortHeader[i], 0, ICompPosX, new Integer(iCurPosY), IStep, new Short(curtabindex++), ICompWidth
});
HIDString = HelpIds.getHelpIdString(FirstHelpIndex);
xSortListBox[i] = CurUnoDialog.insertListBox("lstSort" + Integer.toString(i + 1), SOSORTLST[i], null, new ItemListenerImpl(), new String[]
{
"Dropdown", PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, "LineCount", PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
}, new Object[]
{
true, bDoEnable, 12, HIDString, new Short(UnoDialog.getListBoxLineCount()), "lstSort" + new Integer(i + 1), IListBoxPosX, new Integer(iCurPosY + 14), IStep, new Short(curtabindex++), IListBoxWidth
}); //new Short((short) (17+i*4))
HIDString = HelpIds.getHelpIdString(FirstHelpIndex + 1);
XRadioButton xRadioButtonAsc = CurUnoDialog.insertRadioButton("optAscend" + Integer.toString(i + 1), 0, new String[]
{
PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Tag", PropertyNames.PROPERTY_WIDTH
}, new Object[]
{
bDoEnable, 10, HIDString, sSortAscend[i], IOptButtonPosX, new Integer(iCurPosY + 10), new Short((short) 1), IStep, new Short(curtabindex++), PropertyNames.ASC, IOptButtonWidth
}); //, new Short((short) (18+i*4))
HIDString = HelpIds.getHelpIdString(FirstHelpIndex + 2);
XRadioButton xRadioButtonDesc = CurUnoDialog.insertRadioButton("optDescend" + Integer.toString(i + 1), 0, new String[]
{
PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Tag", PropertyNames.PROPERTY_WIDTH
}, new Object[]
{
bDoEnable, 10, HIDString, sSortDescend[i], IOptButtonPosX, new Integer(iCurPosY + 24), new Short((short) 0), IStep, new Short(curtabindex++), "DESC", IOptButtonWidth
}); //, new Short((short) (19+i*4))
iCurPosY = iCurPosY + 36;
FirstHelpIndex += 3;
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
private boolean getResources()
{
sSortHeader[0] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 20);
sSortHeader[1] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 21);
sSortHeader[2] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 51);
sSortHeader[3] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 52);
sSortAscend[0] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 36);
sSortAscend[1] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 53);
sSortAscend[2] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 54);
sSortAscend[3] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 55);
sSortDescend[0] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 37);
sSortDescend[1] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 56);
sSortDescend[2] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 57);
sSortDescend[3] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 58);
sSortCriteriaisduplicate = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 74);
sNoSorting = CurUnoDialog.m_oResource.getResText(UIConsts.RID_REPORT + 8);
return true;
}
public void initialize(String[] _FieldNames, String[][] _SortFieldNames)
{
int FieldCount = _FieldNames.length;
String[] ViewFieldNames = new String[FieldCount + 1];
ViewFieldNames[0] = sNoSorting;
System.arraycopy(_FieldNames, 0, ViewFieldNames, 1, FieldCount);
short[] SelList = null;
for (int i = 0; i < 4; i++)
{
if (i < _SortFieldNames.length)
{
SelList = new short[]
{
(short) (JavaTools.FieldInList(_FieldNames, _SortFieldNames[i][0]) + 1)
};
}
else
{
SelList = new short[]
{
(short) 0
};
}
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 1), PropertyNames.STRING_ITEM_LIST, ViewFieldNames);
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 1), PropertyNames.SELECTED_ITEMS, SelList);
toggleSortListBox(i, (i <= _SortFieldNames.length));
}
}
private void setMaxSortIndex()
{
MaxSortIndex = -1;
for (int i = 0; i <= MAXSORTCRITERIAINDEX; i++)
{
if (xSortListBox[i].getSelectedItemPos() > 0)
{
MaxSortIndex += 1;
}
}
}
/**
* sets the controls of a Sorting criterion to readonly or not.
* @param _index index of the Sorting criterion
* @param _breadonly
*/
public void setReadOnly(int _index, boolean _breadonly)
{
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(_index + 1), PropertyNames.READ_ONLY, Boolean.valueOf(_breadonly));
}
/**
*
* @param _index the first Sorting criterion in which 'ReadOnly is set to 'false'
* @param _bcomplete
*/
public void setReadOnlyUntil(int _index, boolean _bcomplete)
{
for (int i = 0; i <= 4; i++)
{
boolean breadonly = i < _index;
setReadOnly(i, breadonly);
}
}
private void enableNextSortListBox(int CurIndex)
{
try
{
setMaxSortIndex();
boolean bDoEnable = (xSortListBox[CurIndex].getSelectedItemPos() != 0);
if (!bDoEnable)
{
moveupSortItems(CurIndex, bDoEnable); //disableListBoxesfromIndex(CurIndex);
}
else
{
toggleSortListBox(CurIndex + 1, true);
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public String[][] getSortFieldNames()
{
try
{
short iCurState;
String CurFieldName;
setMaxSortIndex();
// String[][] SortFieldNames = new String[MaxSortIndex + 1][2];
ArrayList<String[]> SortFieldNames = new ArrayList<String[]>();
ArrayList<String> SortDescriptions = new ArrayList<String>();
for (int i = 0; i <= MaxSortIndex; i++)
{
if (!((Boolean) CurUnoDialog.getControlProperty("lstSort" + (i + 1), PropertyNames.READ_ONLY)))
{
CurFieldName = xSortListBox[i].getSelectedItem();
SortDescriptions.add(CurFieldName);
iCurState = ((Short) CurUnoDialog.getControlProperty("optAscend" + Integer.toString(i + 1), PropertyNames.PROPERTY_STATE)).shortValue();
SortFieldNames.add(new String[]{CurFieldName,iCurState == 1 ? PropertyNames.ASC :"DESC" });
}
}
// When searching for a duplicate entry we can neglect wether the entries are to be sorted ascending or descending
// TODO for the future we should deliver a messagebox when two different sorting modes have been applied to one field
int iduplicate = JavaTools.getDuplicateFieldIndex(SortDescriptions.toArray(new String[SortDescriptions.size()]));
if (iduplicate != -1)
{
String sLocSortCriteriaisduplicate = JavaTools.replaceSubString(sSortCriteriaisduplicate, SortFieldNames.get(iduplicate)[0], "<FIELDNAME>");
CurUnoDialog.showMessageBox("WarningBox", VclWindowPeerAttribute.OK, sLocSortCriteriaisduplicate);
CurUnoDialog.vetoableChange(new PropertyChangeEvent(CurUnoDialog, "Steps", 1, 2));
CurUnoDialog.setFocus("lstSort" + (iduplicate + 1));
return new String[][]
{
};
}
else
{
return SortFieldNames.toArray(new String[SortFieldNames.size()][2]);
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public void disableListBoxesfromIndex(int CurIndex)
{
if (CurIndex < MAXSORTCRITERIAINDEX)
{
for (int i = CurIndex + 1; i <= MAXSORTCRITERIAINDEX; i++)
{
toggleSortListBox(i, (false));
if (i < MaxSortIndex)
{
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 2), PropertyNames.SELECTED_ITEMS, new short[]
{
0
});
}
// xSortListBox[i+1].selectItemPos((short)0, true);
}
CurUnoDialog.setFocus("lblSort" + new Integer(CurIndex + 1));
MaxSortIndex = CurIndex - 1;
}
}
// The following code can be reactivated in a future version when task #100799 will be fixed
private void moveupSortItems(int CurIndex, boolean bDoEnable)
{
short iNextItemPos;
if ((!bDoEnable) && (MAXSORTCRITERIAINDEX > CurIndex))
{
for (int i = CurIndex; i < MAXSORTCRITERIAINDEX; i++)
{
iNextItemPos = xSortListBox[i + 1].getSelectedItemPos();
if (iNextItemPos != 0)
{
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 1), PropertyNames.SELECTED_ITEMS, new short[]
{
iNextItemPos
});
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 2), PropertyNames.SELECTED_ITEMS, new short[]
{
});
toggleSortListBox(i, true);
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(i + 2), PropertyNames.SELECTED_ITEMS, new short[]
{
0
});
}
}
if (MaxSortIndex < xSortListBox.length - 2)
{
toggleSortListBox(MaxSortIndex + 2, false);
}
}
else
{
toggleSortListBox(CurIndex + 1, bDoEnable);
}
}
private void toggleSortListBox(int CurIndex, boolean bDoEnable)
{
try
{
if (CurIndex < xSortListBox.length)
{
CurUnoDialog.setControlProperty("lblSort" + Integer.toString(CurIndex + 1), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(CurIndex + 1), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
CurUnoDialog.setControlProperty("optAscend" + Integer.toString(CurIndex + 1), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
CurUnoDialog.setControlProperty("optDescend" + Integer.toString(CurIndex + 1), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
if (!bDoEnable)
{
CurUnoDialog.setControlProperty("lstSort" + Integer.toString(CurIndex + 1), PropertyNames.SELECTED_ITEMS, new short[]
{
0
});
}
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
}