StyledEdit::StatusView Encoding context menu implemented
This commit is contained in:
parent
c45e8003d3
commit
8a85cd4ce8
@ -26,6 +26,7 @@
|
|||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
|
|
||||||
#include "Constants.h"
|
#include "Constants.h"
|
||||||
|
#include "StyledEditWindow.h"
|
||||||
|
|
||||||
|
|
||||||
const float kHorzSpacing = 5.f;
|
const float kHorzSpacing = 5.f;
|
||||||
@ -158,16 +159,18 @@ StatusView::MouseDown(BPoint where)
|
|||||||
if (!fReadOnly)
|
if (!fReadOnly)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float left = fCellWidth[kPositionCell] + fCellWidth[kEncodingCell];
|
if (where.x < fCellWidth[kPositionCell])
|
||||||
if (where.x < left)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
where.x = left;
|
|
||||||
where.y = Bounds().bottom;
|
|
||||||
|
|
||||||
BPopUpMenu *menu = new BPopUpMenu(B_EMPTY_STRING, false, false);
|
BPopUpMenu *menu = new BPopUpMenu(B_EMPTY_STRING, false, false);
|
||||||
|
float left = fCellWidth[kPositionCell] + fCellWidth[kEncodingCell];
|
||||||
|
if (where.x < left)
|
||||||
|
StyledEditWindow::PopulateEncodingMenu(menu, fEncoding);
|
||||||
|
else
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Unlock file"),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Unlock file"),
|
||||||
new BMessage(UNLOCK_FILE)));
|
new BMessage(UNLOCK_FILE)));
|
||||||
|
where.x = left;
|
||||||
|
where.y = Bounds().bottom;
|
||||||
|
|
||||||
ConvertToScreen(&where);
|
ConvertToScreen(&where);
|
||||||
menu->SetTargetForItems(this);
|
menu->SetTargetForItems(this);
|
||||||
@ -188,20 +191,21 @@ StatusView::SetStatus(BMessage* message)
|
|||||||
fCellText[kPositionCell].SetTo(info);
|
fCellText[kPositionCell].SetTo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
BString encoding;
|
if (B_OK == message->FindString("encoding", &fEncoding)) {
|
||||||
if (B_OK == message->FindString("encoding", &encoding)) {
|
|
||||||
// sometime corresponding Int-32 "encoding" attrib is read as string :(
|
// sometime corresponding Int-32 "encoding" attrib is read as string :(
|
||||||
if (encoding.Length() == 0
|
if (fEncoding.Length() == 0
|
||||||
|| encoding.Compare("\xff\xff") == 0
|
|| fEncoding.Compare("\xff\xff") == 0
|
||||||
|| encoding.Compare("UTF-8") == 0)
|
|| fEncoding.Compare("UTF-8") == 0)
|
||||||
{
|
{
|
||||||
fCellText[kEncodingCell] = "UTF-8";
|
fCellText[kEncodingCell] = "UTF-8";
|
||||||
|
fEncoding.Truncate(0);
|
||||||
} else {
|
} else {
|
||||||
const BCharacterSet* charset
|
const BCharacterSet* charset
|
||||||
= BCharacterSetRoster::FindCharacterSetByName(encoding);
|
= BCharacterSetRoster::FindCharacterSetByName(fEncoding);
|
||||||
fCellText[kEncodingCell]
|
fCellText[kEncodingCell]
|
||||||
= charset != NULL ? charset->GetPrintName() : "";
|
= charset != NULL ? charset->GetPrintName() : "";
|
||||||
}
|
}
|
||||||
|
fCellText[kEncodingCell] << " " UTF8_EXPAND_ARROW;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool modified = false;
|
bool modified = false;
|
||||||
|
@ -45,6 +45,7 @@ private:
|
|||||||
BString fCellText[kStatusCellCount];
|
BString fCellText[kStatusCellCount];
|
||||||
float fCellWidth[kStatusCellCount];
|
float fCellWidth[kStatusCellCount];
|
||||||
bool fReadOnly;
|
bool fReadOnly;
|
||||||
|
BString fEncoding;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // STATUS_VIEW_H
|
#endif // STATUS_VIEW_H
|
||||||
|
@ -1291,7 +1291,9 @@ StyledEditWindow::_InitWindow(uint32 encoding)
|
|||||||
fWrapItem->SetMarked(true);
|
fWrapItem->SetMarked(true);
|
||||||
fWrapItem->SetShortcut('W', B_OPTION_KEY);
|
fWrapItem->SetShortcut('W', B_OPTION_KEY);
|
||||||
|
|
||||||
menu->AddItem(fEncodingItem = _MakeEncodingMenuItem());
|
menu->AddItem(fEncodingItem = new BMenuItem(PopulateEncodingMenu(
|
||||||
|
new BMenu(B_TRANSLATE("Text encoding")), "UTF-8"),
|
||||||
|
new BMessage(MENU_RELOAD)));
|
||||||
fEncodingItem->SetEnabled(false);
|
fEncodingItem->SetEnabled(false);
|
||||||
|
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
@ -1882,10 +1884,13 @@ StyledEditWindow::_ShowAlert(const BString& text, const BString& label,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BMenuItem*
|
BMenu*
|
||||||
StyledEditWindow::_MakeEncodingMenuItem()
|
StyledEditWindow::PopulateEncodingMenu(BMenu* menu, const char* currentEncoding)
|
||||||
{
|
{
|
||||||
BMenu* menu = new BMenu(B_TRANSLATE("Text encoding"));
|
menu->SetRadioMode(true);
|
||||||
|
BString encoding(currentEncoding);
|
||||||
|
if (encoding.Length() == 0)
|
||||||
|
encoding.SetTo("UTF-8");
|
||||||
|
|
||||||
BCharacterSetRoster roster;
|
BCharacterSetRoster roster;
|
||||||
BCharacterSet charset;
|
BCharacterSet charset;
|
||||||
@ -1899,7 +1904,10 @@ StyledEditWindow::_MakeEncodingMenuItem()
|
|||||||
BMessage *message = new BMessage(MENU_RELOAD);
|
BMessage *message = new BMessage(MENU_RELOAD);
|
||||||
if (message != NULL) {
|
if (message != NULL) {
|
||||||
message->AddString("encoding", charset.GetName());
|
message->AddString("encoding", charset.GetName());
|
||||||
menu->AddItem(new BMenuItem(name, message));
|
BMenuItem* item = new BMenuItem(name, message);
|
||||||
|
if (encoding.Compare(charset.GetName()) == 0)
|
||||||
|
item->SetMarked(true);
|
||||||
|
menu->AddItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1908,9 +1916,7 @@ StyledEditWindow::_MakeEncodingMenuItem()
|
|||||||
message->AddString("encoding", "auto");
|
message->AddString("encoding", "auto");
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Autodetect"), message));
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Autodetect"), message));
|
||||||
|
|
||||||
menu->SetRadioMode(true);
|
return menu;
|
||||||
|
|
||||||
return new BMenuItem(menu, new BMessage(MENU_RELOAD));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,9 +49,10 @@ public:
|
|||||||
bool caseSensitive);
|
bool caseSensitive);
|
||||||
bool IsDocumentEntryRef(const entry_ref* ref);
|
bool IsDocumentEntryRef(const entry_ref* ref);
|
||||||
|
|
||||||
|
static BMenu* PopulateEncodingMenu(BMenu* menu,
|
||||||
|
const char* encoding);
|
||||||
private:
|
private:
|
||||||
void _InitWindow(uint32 encoding = 0);
|
void _InitWindow(uint32 encoding = 0);
|
||||||
BMenuItem* _MakeEncodingMenuItem();
|
|
||||||
void _LoadAttrs();
|
void _LoadAttrs();
|
||||||
void _SaveAttrs();
|
void _SaveAttrs();
|
||||||
status_t _LoadFile(entry_ref* ref,
|
status_t _LoadFile(entry_ref* ref,
|
||||||
|
Loading…
Reference in New Issue
Block a user