Files
haiku-beta6/src/prefs/translation/transwin.cpp
T
ejakowatz 52a3801208 It is accomplished ...
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-07-09 12:24:59 +00:00

245 lines
6.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
transwin.cpp
*/
#ifndef _APPLICATION_H
#include <Application.h>
#endif
#ifndef TRANS_WIN_H
#include "transwin.h"
#endif
#include <stdlib.h>
DATWindow::DATWindow(BRect frame)
: BWindow(frame, "Data Translations2", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE )
{
newIcon = false;
BRect r( 300, 250, 380, 270 ); // Pos: Info-Button
BRect all( 0, 0, 400, 300); // Fenster-Groesse
BRect cv( 150, 13, 387, 245); // ConfigView & hosting Box
BRect mau( 146, 8, 390, 290); // Grenz-Box around ConfView
BRect DTN_pos( 195 , 245, 298 , 265); // Pos: Dateiname
BRect ic ( 156 , 245, 188 , 277); // Pos: TrackerIcon
Konf = new BView(cv, "KONF", B_NOT_RESIZABLE, B_WILL_DRAW );
// Konf->SetViewColor(217,217,217);
rBox = new BBox(cv, "Right_Side");
gBox = new BBox(mau, "Grau");
Icon = new BView(ic, "Ikon", B_NOT_RESIZABLE, B_WILL_DRAW | B_PULSE_NEEDED);
Icon->SetDrawingMode(B_OP_OVER);
Icon->SetViewColor(217,217,217);
Icon->SetHighColor(217,217,217);
Icon_bit = new BBitmap(BRect(0, 0, 31, 31), B_CMAP8, true, false);
dButton = new BButton(r, "STD", "Info. . .", new BMessage(BUTTON_MSG));
fBox = new BBox(all, "All_Window", B_FOLLOW_ALL_SIDES,
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
B_PLAIN_BORDER);
r.Set( 10, 10, 120, 288); // List View
liste = new LView(r, "Transen", B_SINGLE_SELECTION_LIST);
liste->SetSelectionMessage(new BMessage(SEL_CHANGE));
DTN = new BStringView(DTN_pos, "DataName", "Test", B_NOT_RESIZABLE);
DTN->SetViewColor(217,217,217);
// Here we add the names of all installed translators
WriteTrans();
// Setting up the Box around my LView
r.Set( 8, 8, 123, 288); // Box around the List
lBox = new BBox(r, "List-Box");
lBox->SetBorder(B_NO_BORDER);
lBox->SetViewColor(255,255,255);
// Put list into a BScrollView, to get that nice srcollbar
tListe = new BScrollView("scroll_trans", liste, B_FOLLOW_LEFT | B_FOLLOW_TOP, 0, false, true, B_FANCY_BORDER);
rBox->SetBorder(B_NO_BORDER);
rBox->AddChild(Konf);
rBox->SetFlags(B_NAVIGABLE_JUMP);
// Attach Views to my Window
AddChild(dButton);
AddChild(tListe);
AddChild(rBox);
AddChild(fBox);
AddChild(Icon);
AddChild(DTN);
AddChild(lBox);
AddChild(gBox);
// Set the focus
liste->MakeFocus();
// Select the first Translator in list
liste->Select(0, false);
showInfo = true;
}
bool DATWindow::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return(true);
}
// Reads the installed translators and adds them to our BListView
int DATWindow::WriteTrans()
{
BTranslatorRoster *roster = BTranslatorRoster::Default();
int32 num_translators, i;
translator_id *translators;
const char *tname, *tinfo;
int32 tversion;
// Get all Translators on the system. Gives us the number of translators
// installed in num_translators and a reference to the first one, so
// we can use translators like any normal array
roster->GetAllTranslators(&translators, &num_translators);
for (i=0;i<num_translators;i++) {
// Getting the first three Infos: Name, Info & Version
roster->GetTranslatorInfo(translators[i], &tname,&tinfo, &tversion);
liste->AddItem(new BStringItem(tname));
}
delete [] translators; // clean up our droppings
return 0;
}
// Finds a specific translator by it´s id
void DATWindow::Trans_by_ID(int32 id)
{
BTranslatorRoster *roster = BTranslatorRoster::Default();
int32 num_translators;
translator_id *translators;
// const char *translator_name, *translator_info;
roster->GetAllTranslators(&translators, &num_translators);
// Getting the first three Infos: Name, Info & Version
roster->GetTranslatorInfo(translators[id], &translator_name,&translator_info, &translator_version);
roster->Archive(&archiv, true);
rBox->RemoveChild(Konf);
if (roster->MakeConfigurationView( translators[id], new BMessage() , &Konf, new BRect( 0, 0, 200, 233)) != B_OK )
{
BString text;
text << "The translator '" << translator_name << "' has no settings";
Konf = new BStringView(BRect(0, 0, 200, 233), "no_settings", text.String());
};
// ( 171, 11, 391, 284)
Konf->SetViewColor(217,217,217);
Konf->ResizeTo(230, 233);
Konf->SetFlags(B_WILL_DRAW | B_NAVIGABLE);
rBox->AddChild(Konf);
UpdateIfNeeded(); // Fixes that one Icon problem
delete [] translators; // clean up our droppings
}
void DATWindow::DrawIcon()
{
if (newIcon)
{
entry.SetTo(pfad);
node.SetTo(&entry);
info.SetTo(&node);
Icon->FillRect(BRect(0, 0, 31, 31));
newIcon = false;
}
if (info.GetTrackerIcon(Icon_bit) != B_OK) QuitRequested();
Icon->DrawBitmap(Icon_bit);
}
void DATWindow::WindowActivated(bool state)
{
if (showInfo) DrawIcon();
}
void DATWindow::FrameMoved(BPoint origin)
{
if (showInfo) DrawIcon();
}
void DATWindow::MessageReceived(BMessage* message)
{
int32 selected;
switch(message->what)
{
case BUTTON_MSG:
selected=liste->CurrentSelection(0);
// Should we show translator info?
if (!showInfo)
{
// No => Show standard box
(new BAlert("yo!", "Translation Settings\n\nUse this control panel to set values that various\ntranslators use when no other settings are specified\nin the application.", "OK"))->Go();
break;
}
// Yes => Show Translator info.
Trans_by_ID(selected);
archiv.FindString("be:translator_path", selected, &pfad);
tex.SetTo("");
tex << "Name: " << translator_name << "\nVersion: " << (int32)translator_version << "\nInfo: " << translator_info << "\nPath: " << pfad << "\n";
(new BAlert("yo!", tex.String(), "OK"))->Go();
tex.SetTo("");
DrawIcon();
break;
case SEL_CHANGE:
// Now we have to update Filename and Icon
// First we find the selected Translator
selected=liste->CurrentSelection(0);
// If none selected, clear the old one
if (selected < 0)
{
Icon->FillRect(BRect(0, 0, 31, 31));
DTN->SetText("");
showInfo = false;
rBox->RemoveChild(Konf);
break;
}
newIcon = true;
showInfo = true;
Trans_by_ID(selected);
// Now we find the path, and update filename
archiv.FindString("be:translator_path", selected, &pfad);
tex.SetTo(pfad);
tex.Remove(0,tex.FindLast("/")+1);
DTN->SetText(tex.String());
DrawIcon();
break;
default:
BWindow::MessageReceived(message);
}
}