Sendungsliste - Navigation
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Für die Zeilenanzahl sollte doch eigentlich ein simple "y++" reichen, oder?
Das klappt nämlich nicht.
Das klappt nämlich nicht.
Re: Sendungsliste - Navigation
Nein, das reicht nicht, das legt nur fest, in welcher Zeile die Komponente ist. Die Zeilen muss man vorher im FormLayout definieren.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Sorry, aber ich sehe es irgendwie nicht. Was ich im Code habe ist nur das.
Bitte verrate mir, wo ich die Zeilenanzahl hinterlege.
Code: Alles auswählen
FormLayout layout = new FormLayout("default,3dlu,100dlu:grow,3dlu,default","default,3dlu,fill:default:grow");
setLayout(layout);
setOpaque(false);
if(type == TYPE_NAME_AND_PROGRAM_FILTER) {
layout.insertRow(1, RowSpec.decode("default"));
layout.insertRow(2, RowSpec.decode("3dlu"));
}
Re: Sendungsliste - Navigation
Eigentlich ist das ja sogar sprechender Quellcode:
Liest sich als: Layout.ZeileEinfügen(Zeilennummer, Zeilenformat);
Das kannst du ein weiteres Mal ohne Bedingung einfügen, damit du eine neue Zeile mit Standardhöhe (default) und eine Abstandszeile mit der Höhe 3dlu erhältst.
Code: Alles auswählen
layout.insertRow(1, RowSpec.decode("default"));
layout.insertRow(2, RowSpec.decode("3dlu"));
Das kannst du ein weiteres Mal ohne Bedingung einfügen, damit du eine neue Zeile mit Standardhöhe (default) und eine Abstandszeile mit der Höhe 3dlu erhältst.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
So hatte ich mir das auch gedacht! Aber wenn ich das ausprobiere, funktioniert es nicht.
Was mache ich denn da falsch?
Was mache ich denn da falsch?
Re: Sendungsliste - Navigation
Bekommst du denn keine Fehlermeldung? Normalerweise müsste eine Exception auftreten, wenn man eine Komponente einer nicht existierenden Zeile hinzuzufügen versucht.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Nein, die GUI wird nur nicht korrekt aufgebaut.
Re: Sendungsliste - Navigation
Dann fügst du die Komponenten vielleicht einfach nicht in die richtigen Zeilen ein, so dass sie z.B. in einer 3dlu-Zeile landen. 3dlu ist aber nur der Zwischenraum und damit sehr schmal, so dass man in der Regel nicht viel von den Komponenten sieht.
Du kannst auch testweise ein try{}catch(Throwable t) {t.printStackTrace();} um die Erstellung der GUI in createGui() legen um sicher zu gehen, auch wirklich keinen Fehler zu verpassen.
Du kannst auch testweise ein try{}catch(Throwable t) {t.printStackTrace();} um die Erstellung der GUI in createGui() legen um sicher zu gehen, auch wirklich keinen Fehler zu verpassen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Gehen wir das Ganze doch mal systematisch Schritt für Schritt an.
Also nach ein wenig "Try and Error" wird die GUI richtig angezeigt. Aber irgendwie ist das immer noch seltsam.
Das kann doch nicht so gedacht sein, oder? Irgendwo habe ich da noch einen Denkfehler.
Vielleicht schaust Du Dir das mal an.
Nun habe ich eine public-Methode gebaut, die einen Channel annimmt und in ein Feld der Klasse schreibt.
Diesen selektierten Channel übernimmt ja dann die Combobox.
Aber wo muß ich die nun aufrufen. Das habe ich noch nicht gefunden.
Die Implementierungen für den Label-Text "Sender" und den Eintrag "Alle " sind auch noch stark verbesserungswürdig.
Vielleicht hast Du dafür auch eine Idee. Irgenwo muß das Ding doch ein Property-File haben.
Also nach ein wenig "Try and Error" wird die GUI richtig angezeigt. Aber irgendwie ist das immer noch seltsam.
Das kann doch nicht so gedacht sein, oder? Irgendwo habe ich da noch einen Denkfehler.
Vielleicht schaust Du Dir das mal an.
Code: Alles auswählen
private void createGUI(int type, boolean showNumberOfPrograms, int startType, ProgramFilter startFilter) {
FormLayout layout = new FormLayout("default,3dlu,100dlu:grow,3dlu,default","default,3dlu,fill:default:grow");
setLayout(layout);
setOpaque(false);
if(type == TYPE_NAME_AND_PROGRAM_FILTER) {
layout.insertRow(1, RowSpec.decode("default"));
layout.insertRow(2, RowSpec.decode("3dlu"));
layout.insertRow(1, RowSpec.decode("default"));
layout.insertRow(2, RowSpec.decode("3dlu"));
layout.insertRow(1, RowSpec.decode("default"));
layout.insertRow(2, RowSpec.decode("3dlu"));
}
int y = 1;
Channel[] subscribedChannels = Plugin.getPluginManager().getSubscribedChannels();
mChannelBox = new WideComboBox();
mChannelBox.addItem("Alle");
for (int i = 0; i < subscribedChannels .length; i++) {
mChannelBox.addItem (subscribedChannels[i]);
}
if (mSelectedChannel != null) {
mChannelBox.setSelectedItem(mSelectedChannel);
}
mChannelBoxLabel = new JLabel("Sender");
add(mChannelBoxLabel , CC.xy(1, y));
add(mChannelBox , CC.xyw(3, y, 3));
y+=2;
mProgramFilterBox = new WideComboBox();
if(type == TYPE_NAME_AND_PROGRAM_FILTER || type == TYPE_PROGRAM_ONLY_FILTER) {
mProgramFilterBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
filterPrograms((ProgramFilter)mProgramFilterBox.getSelectedItem());
scrollToFirstNotExpiredIndex(false);
}
}
});
fillProgramFilterBox(startType, startFilter);
JButton refresh = new JButton(TVBrowserIcons.refresh(TVBrowserIcons.SIZE_SMALL));
refresh.setToolTipText(LOCALIZER.msg("refresh", "Refresh list with current filter"));
refresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
filterPrograms((ProgramFilter)mProgramFilterBox.getSelectedItem());
}
});
long refreshDureation = 10*60*1000; // refresh duration in milliseconds set to 10 minutes
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
filterPrograms((ProgramFilter)mProgramFilterBox.getSelectedItem());
}
}, refreshDureation, refreshDureation);
mProgramFilterLabel = new JLabel(LOCALIZER.msg("filterPrograms", "Program filter:"));
add(mProgramFilterLabel, CC.xy(1, y));
add(mProgramFilterBox, CC.xy(3, y));
add(refresh, CC.xy(5, y));
y+=2;
}
else {
mProgramFilterBox.addItem(FilterManagerImpl.getInstance().getAllFilter());
}
if(type == TYPE_NAME_AND_PROGRAM_FILTER || type == TYPE_NAME_ONLY_FILTER) {
mTitleFilterBox = new WideComboBox();
mTitleFilterBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
filterPrograms((ProgramFilter)mTitleFilterBox.getSelectedItem(), true);
scrollToFirstNotExpiredIndex(false);
}
}
});
mTitleFilterLabel = new JLabel(LOCALIZER.msg("filterTitles","Title filter:"));
add(mTitleFilterLabel, CC.xy(1, y));
add(mTitleFilterBox, CC.xyw(3, y, 3));
y+=2;
}
if(showNumberOfPrograms) {
layout.insertRow(y, RowSpec.decode("default"));
layout.insertRow(y+1, RowSpec.decode("3dlu"));
mNumberLabel = new JLabel(LOCALIZER.msg("numberOfPrograms", "Number of shown programs: {0}", 0));
add(mNumberLabel, CC.xyw(1, y, 5));
}
mProgramListScrollPane = new JScrollPane(mProgramList);
mProgramListScrollPane.setBorder(null);
y+=4;
add(mProgramListScrollPane, CC.xyw(1, y, 5));
}
Code: Alles auswählen
public void setSelectedChannel(Channel selectedChannel) {
mSelectedChannel = selectedChannel;
}
Aber wo muß ich die nun aufrufen. Das habe ich noch nicht gefunden.
Die Implementierungen für den Label-Text "Sender" und den Eintrag "Alle " sind auch noch stark verbesserungswürdig.
Vielleicht hast Du dafür auch eine Idee. Irgenwo muß das Ding doch ein Property-File haben.
Re: Sendungsliste - Navigation
Du musst den Sender nicht als Klassenvariable abspeichern, denn du hast ja schon die Combobox als Klassenvariable, bei der kannst du einfach getSelectedItem() abfragen und natürlich auch in der Methode setSelectedChannel den ausgewählten Sender der Combox mit setSelectedItem(Channel) setzten. Da auf der Combobox ein ItemListener registriert ist, wird bei jeder Änderung des ausgewählten Senders der ItemListener ausgelöst, der dann die Methode zum Neuaufbau der Liste auslöst.
In der Methode, die die Liste füllt, musst du dann natürlich den ausgewählten Sender der Combobox abfragen und mit den Sendern der Sendungen vergleichen um die dann entsprechend zu filtern. Um den Aufruf von extern um über die Senderliste den auszuwählen brauchst du dich noch gar nicht kümmern solange du nicht mit der Combobox selbst die Filterung erfolgreich durchführen kannst.
In der Methode, die die Liste füllt, musst du dann natürlich den ausgewählten Sender der Combobox abfragen und mit den Sendern der Sendungen vergleichen um die dann entsprechend zu filtern. Um den Aufruf von extern um über die Senderliste den auszuwählen brauchst du dich noch gar nicht kümmern solange du nicht mit der Combobox selbst die Filterung erfolgreich durchführen kannst.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Das Filtern mit dem entsprechennde Sender habe ich hinbekommen. Nun fehlt eigentlich nur noch der externe Aufruf.
Wo muß ich meine public-Methode setSelectedChannel(Channel selectedChannel) denn aufrufen?
Wo muß ich meine public-Methode setSelectedChannel(Channel selectedChannel) denn aufrufen?
Re: Sendungsliste - Navigation
In FavoritesPlugin.java gibt es in Zeile 193 ein PluginCenterPanelWrapper, dort musst du die Methode public void scrolledToChannel(Channel channel) { überschreiben, die wird von TV-Browser aufgerufen, wenn ein Sender in der Liste angeklickt wird. Das läuft dann genau wie bei filterSelected in der gleichen Klasse.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Also ich hab edas mal mit diesem Ansatz vrsucht, aber der Konstruktor muß wohl anders gefüllt werden, oder?
Das klappt nämlich nicht.
Das klappt nämlich nicht.
Code: Alles auswählen
@Override
public void scrolledToChannel(Channel channel) {
FilterableProgramListPanel filterableProgramListPanel = new FilterableProgramListPanel(0, null, false, false, null, 0);
filterableProgramListPanel.setSelectedChannel(channel);
}
Re: Sendungsliste - Navigation
Das Panel gibt es schon, das musst du da nicht neu anlegen. Ich schrieb ja, dass du es analog zur Methode filterSelected(ProgramFilter) in PluginCenterPanelWrapper umsetzen kannst.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Sendungsliste - Navigation
Dann verstehe ich Dich gerade nicht.
filterSelected(ProgramFilter filter) wird so überschrieben
Ich brauche aber doch ein FilterableProgramListPanel und eclipse sagt mir, dass er das nicht hat.
Wo ist mein Denkfehler?
filterSelected(ProgramFilter filter) wird so überschrieben
Code: Alles auswählen
@Override
public void filterSelected(ProgramFilter filter) {
if(mMangePanel != null && reactOnFilterChange()) {
mMangePanel.selectFilter(filter);
}
}
Wo ist mein Denkfehler?